// SPDX-License-Identifier: MIT
// Copyright (C) 2018-present iced project and contributors

using Generator.Enums;
using Generator.Enums.Decoder;

namespace Generator.Decoder {
	static class DecoderTable_Legacy {
		public const string Handlers_MAP0 = nameof(Handlers_MAP0);

		public static (string name, object?[] handlers)[] CreateHandlers(GenTypes genTypes) {
			var kind = genTypes[TypeIds.LegacyOpCodeHandlerKind];
			var code = genTypes[TypeIds.Code];
			var options = genTypes[TypeIds.DecoderOptions];
			var reg = genTypes[TypeIds.Register];
			var handlerFlags = genTypes[TypeIds.HandlerFlags];
			var legacyHandlerFlags = genTypes[TypeIds.LegacyHandlerFlags];

			var Bitness = kind[nameof(LegacyOpCodeHandlerKind.Bitness)];
			var Bitness_DontReadModRM = kind[nameof(LegacyOpCodeHandlerKind.Bitness_DontReadModRM)];
			var RM = kind[nameof(LegacyOpCodeHandlerKind.RM)];
			var Options3 = kind[nameof(LegacyOpCodeHandlerKind.Options3)];
			var Options5 = kind[nameof(LegacyOpCodeHandlerKind.Options5)];
			var Options_DontReadModRM = kind[nameof(LegacyOpCodeHandlerKind.Options_DontReadModRM)];
			var AnotherTable = kind[nameof(LegacyOpCodeHandlerKind.AnotherTable)];
			var Group = kind[nameof(LegacyOpCodeHandlerKind.Group)];
			var Group8x64 = kind[nameof(LegacyOpCodeHandlerKind.Group8x64)];
			var Group8x8 = kind[nameof(LegacyOpCodeHandlerKind.Group8x8)];
			var MandatoryPrefix = kind[nameof(LegacyOpCodeHandlerKind.MandatoryPrefix)];
			var MandatoryPrefix4 = kind[nameof(LegacyOpCodeHandlerKind.MandatoryPrefix4)];
			var Ev_REXW_1a = kind[nameof(LegacyOpCodeHandlerKind.Ev_REXW_1a)];
			var MandatoryPrefix_NoModRM = kind[nameof(LegacyOpCodeHandlerKind.MandatoryPrefix_NoModRM)];
			var MandatoryPrefix3 = kind[nameof(LegacyOpCodeHandlerKind.MandatoryPrefix3)];
			var D3NOW = kind[nameof(LegacyOpCodeHandlerKind.D3NOW)];
			var EVEX = kind[nameof(LegacyOpCodeHandlerKind.EVEX)];
			var VEX2 = kind[nameof(LegacyOpCodeHandlerKind.VEX2)];
			var VEX3 = kind[nameof(LegacyOpCodeHandlerKind.VEX3)];
			var XOP = kind[nameof(LegacyOpCodeHandlerKind.XOP)];
			var AL_DX = kind[nameof(LegacyOpCodeHandlerKind.AL_DX)];
			var Ap = kind[nameof(LegacyOpCodeHandlerKind.Ap)];
			var B_BM = kind[nameof(LegacyOpCodeHandlerKind.B_BM)];
			var B_Ev = kind[nameof(LegacyOpCodeHandlerKind.B_Ev)];
			var B_MIB = kind[nameof(LegacyOpCodeHandlerKind.B_MIB)];
			var BM_B = kind[nameof(LegacyOpCodeHandlerKind.BM_B)];
			var BranchIw = kind[nameof(LegacyOpCodeHandlerKind.BranchIw)];
			var BranchSimple = kind[nameof(LegacyOpCodeHandlerKind.BranchSimple)];
			var C_R_3a = kind[nameof(LegacyOpCodeHandlerKind.C_R_3a)];
			var C_R_3b = kind[nameof(LegacyOpCodeHandlerKind.C_R_3b)];
			var DX_AL = kind[nameof(LegacyOpCodeHandlerKind.DX_AL)];
			var DX_eAX = kind[nameof(LegacyOpCodeHandlerKind.DX_eAX)];
			var eAX_DX = kind[nameof(LegacyOpCodeHandlerKind.eAX_DX)];
			var Eb_1 = kind[nameof(LegacyOpCodeHandlerKind.Eb_1)];
			var Eb_2 = kind[nameof(LegacyOpCodeHandlerKind.Eb_2)];
			var Eb_CL = kind[nameof(LegacyOpCodeHandlerKind.Eb_CL)];
			var Eb_Gb_1 = kind[nameof(LegacyOpCodeHandlerKind.Eb_Gb_1)];
			var Eb_Gb_2 = kind[nameof(LegacyOpCodeHandlerKind.Eb_Gb_2)];
			var Eb_Ib_1 = kind[nameof(LegacyOpCodeHandlerKind.Eb_Ib_1)];
			var Eb_Ib_2 = kind[nameof(LegacyOpCodeHandlerKind.Eb_Ib_2)];
			var Eb1 = kind[nameof(LegacyOpCodeHandlerKind.Eb1)];
			var Ed_V_Ib = kind[nameof(LegacyOpCodeHandlerKind.Ed_V_Ib)];
			var Ep = kind[nameof(LegacyOpCodeHandlerKind.Ep)];
			var Ev_3a = kind[nameof(LegacyOpCodeHandlerKind.Ev_3a)];
			var Ev_3b = kind[nameof(LegacyOpCodeHandlerKind.Ev_3b)];
			var Ev_4 = kind[nameof(LegacyOpCodeHandlerKind.Ev_4)];
			var Ev_CL = kind[nameof(LegacyOpCodeHandlerKind.Ev_CL)];
			var Ev_Gv_32_64 = kind[nameof(LegacyOpCodeHandlerKind.Ev_Gv_32_64)];
			var Ev_Gv_3a = kind[nameof(LegacyOpCodeHandlerKind.Ev_Gv_3a)];
			var Ev_Gv_3b = kind[nameof(LegacyOpCodeHandlerKind.Ev_Gv_3b)];
			var Ev_Gv_4 = kind[nameof(LegacyOpCodeHandlerKind.Ev_Gv_4)];
			var Ev_Gv_CL = kind[nameof(LegacyOpCodeHandlerKind.Ev_Gv_CL)];
			var Ev_Gv_Ib = kind[nameof(LegacyOpCodeHandlerKind.Ev_Gv_Ib)];
			var Ev_Gv_REX = kind[nameof(LegacyOpCodeHandlerKind.Ev_Gv_REX)];
			var Ev_Ib_3 = kind[nameof(LegacyOpCodeHandlerKind.Ev_Ib_3)];
			var Ev_Ib_4 = kind[nameof(LegacyOpCodeHandlerKind.Ev_Ib_4)];
			var Ev_Ib2_3 = kind[nameof(LegacyOpCodeHandlerKind.Ev_Ib2_3)];
			var Ev_Ib2_4 = kind[nameof(LegacyOpCodeHandlerKind.Ev_Ib2_4)];
			var Ev_Iz_3 = kind[nameof(LegacyOpCodeHandlerKind.Ev_Iz_3)];
			var Ev_Iz_4 = kind[nameof(LegacyOpCodeHandlerKind.Ev_Iz_4)];
			var Ev_P = kind[nameof(LegacyOpCodeHandlerKind.Ev_P)];
			var Ev_REXW = kind[nameof(LegacyOpCodeHandlerKind.Ev_REXW)];
			var Ev_Sw = kind[nameof(LegacyOpCodeHandlerKind.Ev_Sw)];
			var Ev_VX = kind[nameof(LegacyOpCodeHandlerKind.Ev_VX)];
			var Ev1 = kind[nameof(LegacyOpCodeHandlerKind.Ev1)];
			var Evj = kind[nameof(LegacyOpCodeHandlerKind.Evj)];
			var Evw = kind[nameof(LegacyOpCodeHandlerKind.Evw)];
			var Ew = kind[nameof(LegacyOpCodeHandlerKind.Ew)];
			var Gb_Eb = kind[nameof(LegacyOpCodeHandlerKind.Gb_Eb)];
			var Gdq_Ev = kind[nameof(LegacyOpCodeHandlerKind.Gdq_Ev)];
			var Gv_Eb = kind[nameof(LegacyOpCodeHandlerKind.Gv_Eb)];
			var Gv_Eb_REX = kind[nameof(LegacyOpCodeHandlerKind.Gv_Eb_REX)];
			var Gv_Ev_32_64 = kind[nameof(LegacyOpCodeHandlerKind.Gv_Ev_32_64)];
			var Gv_Ev_3a = kind[nameof(LegacyOpCodeHandlerKind.Gv_Ev_3a)];
			var Gv_Ev_3b = kind[nameof(LegacyOpCodeHandlerKind.Gv_Ev_3b)];
			var Gv_Ev_Ib = kind[nameof(LegacyOpCodeHandlerKind.Gv_Ev_Ib)];
			var Gv_Ev_Ib_REX = kind[nameof(LegacyOpCodeHandlerKind.Gv_Ev_Ib_REX)];
			var Gv_Ev_Iz = kind[nameof(LegacyOpCodeHandlerKind.Gv_Ev_Iz)];
			var Gv_Ev_REX = kind[nameof(LegacyOpCodeHandlerKind.Gv_Ev_REX)];
			var Gv_Ev2 = kind[nameof(LegacyOpCodeHandlerKind.Gv_Ev2)];
			var Gv_Ev3 = kind[nameof(LegacyOpCodeHandlerKind.Gv_Ev3)];
			var Gv_Ew = kind[nameof(LegacyOpCodeHandlerKind.Gv_Ew)];
			var Gv_M = kind[nameof(LegacyOpCodeHandlerKind.Gv_M)];
			var Gv_M_as = kind[nameof(LegacyOpCodeHandlerKind.Gv_M_as)];
			var Gv_Ma = kind[nameof(LegacyOpCodeHandlerKind.Gv_Ma)];
			var Gv_Mp_2 = kind[nameof(LegacyOpCodeHandlerKind.Gv_Mp_2)];
			var Gv_Mp_3 = kind[nameof(LegacyOpCodeHandlerKind.Gv_Mp_3)];
			var Gv_Mv = kind[nameof(LegacyOpCodeHandlerKind.Gv_Mv)];
			var Gv_N = kind[nameof(LegacyOpCodeHandlerKind.Gv_N)];
			var Gv_N_Ib_REX = kind[nameof(LegacyOpCodeHandlerKind.Gv_N_Ib_REX)];
			var Gv_RX = kind[nameof(LegacyOpCodeHandlerKind.Gv_RX)];
			var Gv_W = kind[nameof(LegacyOpCodeHandlerKind.Gv_W)];
			var GvM_VX_Ib = kind[nameof(LegacyOpCodeHandlerKind.GvM_VX_Ib)];
			var Ib = kind[nameof(LegacyOpCodeHandlerKind.Ib)];
			var Ib3 = kind[nameof(LegacyOpCodeHandlerKind.Ib3)];
			var IbReg = kind[nameof(LegacyOpCodeHandlerKind.IbReg)];
			var IbReg2 = kind[nameof(LegacyOpCodeHandlerKind.IbReg2)];
			var Iw_Ib = kind[nameof(LegacyOpCodeHandlerKind.Iw_Ib)];
			var Jb = kind[nameof(LegacyOpCodeHandlerKind.Jb)];
			var Jb2 = kind[nameof(LegacyOpCodeHandlerKind.Jb2)];
			var Jdisp = kind[nameof(LegacyOpCodeHandlerKind.Jdisp)];
			var Jx = kind[nameof(LegacyOpCodeHandlerKind.Jx)];
			var Jz = kind[nameof(LegacyOpCodeHandlerKind.Jz)];
			var M_1 = kind[nameof(LegacyOpCodeHandlerKind.M_1)];
			var M_2 = kind[nameof(LegacyOpCodeHandlerKind.M_2)];
			var M_REXW_2 = kind[nameof(LegacyOpCodeHandlerKind.M_REXW_2)];
			var M_REXW_4 = kind[nameof(LegacyOpCodeHandlerKind.M_REXW_4)];
			var MemBx = kind[nameof(LegacyOpCodeHandlerKind.MemBx)];
			var Mf_1 = kind[nameof(LegacyOpCodeHandlerKind.Mf_1)];
			var Mf_2a = kind[nameof(LegacyOpCodeHandlerKind.Mf_2a)];
			var Mf_2b = kind[nameof(LegacyOpCodeHandlerKind.Mf_2b)];
			var MIB_B = kind[nameof(LegacyOpCodeHandlerKind.MIB_B)];
			var MP = kind[nameof(LegacyOpCodeHandlerKind.MP)];
			var Ms = kind[nameof(LegacyOpCodeHandlerKind.Ms)];
			var MV = kind[nameof(LegacyOpCodeHandlerKind.MV)];
			var Mv_Gv = kind[nameof(LegacyOpCodeHandlerKind.Mv_Gv)];
			var Mv_Gv_REXW = kind[nameof(LegacyOpCodeHandlerKind.Mv_Gv_REXW)];
			var NIb = kind[nameof(LegacyOpCodeHandlerKind.NIb)];
			var Ob_Reg = kind[nameof(LegacyOpCodeHandlerKind.Ob_Reg)];
			var Ov_Reg = kind[nameof(LegacyOpCodeHandlerKind.Ov_Reg)];
			var P_Ev = kind[nameof(LegacyOpCodeHandlerKind.P_Ev)];
			var P_Ev_Ib = kind[nameof(LegacyOpCodeHandlerKind.P_Ev_Ib)];
			var P_Q = kind[nameof(LegacyOpCodeHandlerKind.P_Q)];
			var P_Q_Ib = kind[nameof(LegacyOpCodeHandlerKind.P_Q_Ib)];
			var P_R = kind[nameof(LegacyOpCodeHandlerKind.P_R)];
			var P_W = kind[nameof(LegacyOpCodeHandlerKind.P_W)];
			var PushEv = kind[nameof(LegacyOpCodeHandlerKind.PushEv)];
			var PushIb2 = kind[nameof(LegacyOpCodeHandlerKind.PushIb2)];
			var PushIz = kind[nameof(LegacyOpCodeHandlerKind.PushIz)];
			var PushOpSizeReg_4a = kind[nameof(LegacyOpCodeHandlerKind.PushOpSizeReg_4a)];
			var PushOpSizeReg_4b = kind[nameof(LegacyOpCodeHandlerKind.PushOpSizeReg_4b)];
			var PushSimple2 = kind[nameof(LegacyOpCodeHandlerKind.PushSimple2)];
			var PushSimpleReg = kind[nameof(LegacyOpCodeHandlerKind.PushSimpleReg)];
			var Q_P = kind[nameof(LegacyOpCodeHandlerKind.Q_P)];
			var R_C_3a = kind[nameof(LegacyOpCodeHandlerKind.R_C_3a)];
			var R_C_3b = kind[nameof(LegacyOpCodeHandlerKind.R_C_3b)];
			var rDI_P_N = kind[nameof(LegacyOpCodeHandlerKind.rDI_P_N)];
			var rDI_VX_RX = kind[nameof(LegacyOpCodeHandlerKind.rDI_VX_RX)];
			var Reg = kind[nameof(LegacyOpCodeHandlerKind.Reg)];
			var Reg_Ib2 = kind[nameof(LegacyOpCodeHandlerKind.Reg_Ib2)];
			var Reg_Iz = kind[nameof(LegacyOpCodeHandlerKind.Reg_Iz)];
			var Reg_Ob = kind[nameof(LegacyOpCodeHandlerKind.Reg_Ob)];
			var Reg_Ov = kind[nameof(LegacyOpCodeHandlerKind.Reg_Ov)];
			var Reg_Xb = kind[nameof(LegacyOpCodeHandlerKind.Reg_Xb)];
			var Reg_Xv = kind[nameof(LegacyOpCodeHandlerKind.Reg_Xv)];
			var Reg_Xv2 = kind[nameof(LegacyOpCodeHandlerKind.Reg_Xv2)];
			var Reg_Yb = kind[nameof(LegacyOpCodeHandlerKind.Reg_Yb)];
			var Reg_Yv = kind[nameof(LegacyOpCodeHandlerKind.Reg_Yv)];
			var RegIb = kind[nameof(LegacyOpCodeHandlerKind.RegIb)];
			var RegIb3 = kind[nameof(LegacyOpCodeHandlerKind.RegIb3)];
			var RegIz2 = kind[nameof(LegacyOpCodeHandlerKind.RegIz2)];
			var Reservednop = kind[nameof(LegacyOpCodeHandlerKind.Reservednop)];
			var RIb = kind[nameof(LegacyOpCodeHandlerKind.RIb)];
			var RIbIb = kind[nameof(LegacyOpCodeHandlerKind.RIbIb)];
			var Rv = kind[nameof(LegacyOpCodeHandlerKind.Rv)];
			var Rv_32_64 = kind[nameof(LegacyOpCodeHandlerKind.Rv_32_64)];
			var RvMw_Gw = kind[nameof(LegacyOpCodeHandlerKind.RvMw_Gw)];
			var Simple = kind[nameof(LegacyOpCodeHandlerKind.Simple)];
			var Simple_ModRM = kind[nameof(LegacyOpCodeHandlerKind.Simple_ModRM)];
			var Simple2_3a = kind[nameof(LegacyOpCodeHandlerKind.Simple2_3a)];
			var Simple2_3b = kind[nameof(LegacyOpCodeHandlerKind.Simple2_3b)];
			var Simple2Iw = kind[nameof(LegacyOpCodeHandlerKind.Simple2Iw)];
			var Simple3 = kind[nameof(LegacyOpCodeHandlerKind.Simple3)];
			var Simple4 = kind[nameof(LegacyOpCodeHandlerKind.Simple4)];
			var Simple5 = kind[nameof(LegacyOpCodeHandlerKind.Simple5)];
			var Simple5_a32 = kind[nameof(LegacyOpCodeHandlerKind.Simple5_a32)];
			var Simple5_ModRM_as = kind[nameof(LegacyOpCodeHandlerKind.Simple5_ModRM_as)];
			var SimpleReg = kind[nameof(LegacyOpCodeHandlerKind.SimpleReg)];
			var ST_STi = kind[nameof(LegacyOpCodeHandlerKind.ST_STi)];
			var STi = kind[nameof(LegacyOpCodeHandlerKind.STi)];
			var STi_ST = kind[nameof(LegacyOpCodeHandlerKind.STi_ST)];
			var Sw_Ev = kind[nameof(LegacyOpCodeHandlerKind.Sw_Ev)];
			var V_Ev = kind[nameof(LegacyOpCodeHandlerKind.V_Ev)];
			var VM = kind[nameof(LegacyOpCodeHandlerKind.VM)];
			var VN = kind[nameof(LegacyOpCodeHandlerKind.VN)];
			var VQ = kind[nameof(LegacyOpCodeHandlerKind.VQ)];
			var VRIbIb = kind[nameof(LegacyOpCodeHandlerKind.VRIbIb)];
			var VW_2 = kind[nameof(LegacyOpCodeHandlerKind.VW_2)];
			var VW_3 = kind[nameof(LegacyOpCodeHandlerKind.VW_3)];
			var VWIb_2 = kind[nameof(LegacyOpCodeHandlerKind.VWIb_2)];
			var VWIb_3 = kind[nameof(LegacyOpCodeHandlerKind.VWIb_3)];
			var VX_E_Ib = kind[nameof(LegacyOpCodeHandlerKind.VX_E_Ib)];
			var VX_Ev = kind[nameof(LegacyOpCodeHandlerKind.VX_Ev)];
			var Wbinvd = kind[nameof(LegacyOpCodeHandlerKind.Wbinvd)];
			var WV = kind[nameof(LegacyOpCodeHandlerKind.WV)];
			var Xb_Yb = kind[nameof(LegacyOpCodeHandlerKind.Xb_Yb)];
			var Xchg_Reg_rAX = kind[nameof(LegacyOpCodeHandlerKind.Xchg_Reg_rAX)];
			var Xv_Yv = kind[nameof(LegacyOpCodeHandlerKind.Xv_Yv)];
			var Yb_Reg = kind[nameof(LegacyOpCodeHandlerKind.Yb_Reg)];
			var Yb_Xb = kind[nameof(LegacyOpCodeHandlerKind.Yb_Xb)];
			var Yv_Reg = kind[nameof(LegacyOpCodeHandlerKind.Yv_Reg)];
			var Yv_Reg2 = kind[nameof(LegacyOpCodeHandlerKind.Yv_Reg2)];
			var Yv_Xv = kind[nameof(LegacyOpCodeHandlerKind.Yv_Xv)];
			var Simple4b = kind[nameof(LegacyOpCodeHandlerKind.Simple4b)];
			var Options1632_1 = kind[nameof(LegacyOpCodeHandlerKind.Options1632_1)];
			var Options1632_2 = kind[nameof(LegacyOpCodeHandlerKind.Options1632_2)];
			var M_Sw = kind[nameof(LegacyOpCodeHandlerKind.M_Sw)];
			var Sw_M = kind[nameof(LegacyOpCodeHandlerKind.Sw_M)];
			var Rq = kind[nameof(LegacyOpCodeHandlerKind.Rq)];
			var Gd_Rd = kind[nameof(LegacyOpCodeHandlerKind.Gd_Rd)];
			var PrefixEsCsSsDs = kind[nameof(LegacyOpCodeHandlerKind.PrefixEsCsSsDs)];
			var PrefixFsGs = kind[nameof(LegacyOpCodeHandlerKind.PrefixFsGs)];
			var Prefix66 = kind[nameof(LegacyOpCodeHandlerKind.Prefix66)];
			var Prefix67 = kind[nameof(LegacyOpCodeHandlerKind.Prefix67)];
			var PrefixF0 = kind[nameof(LegacyOpCodeHandlerKind.PrefixF0)];
			var PrefixF2 = kind[nameof(LegacyOpCodeHandlerKind.PrefixF2)];
			var PrefixF3 = kind[nameof(LegacyOpCodeHandlerKind.PrefixF3)];
			var PrefixREX = kind[nameof(LegacyOpCodeHandlerKind.PrefixREX)];

			var al = reg[nameof(Register.AL)];
			var ax = reg[nameof(Register.AX)];
			var dx = reg[nameof(Register.DX)];
			var es = reg[nameof(Register.ES)];
			var cs = reg[nameof(Register.CS)];
			var ss = reg[nameof(Register.SS)];
			var ds = reg[nameof(Register.DS)];
			var fs = reg[nameof(Register.FS)];
			var gs = reg[nameof(Register.GS)];
			var cr0 = reg[nameof(Register.CR0)];
			var dr0 = reg[nameof(Register.DR0)];
			var tr0 = reg[nameof(Register.TR0)];

			var invalid = new object[] { kind[nameof(LegacyOpCodeHandlerKind.Invalid)] };
			var invalid_NoModRM = new object[] { kind[nameof(LegacyOpCodeHandlerKind.Invalid_NoModRM)] };
			var handlers = new (string name, object?[] handlers)[] {
				("handlers_FPU_D8_low",
				new object[8] {
					new object[] { Mf_1, code[nameof(Code.Fadd_m32fp)] },
					new object[] { Mf_1, code[nameof(Code.Fmul_m32fp)] },
					new object[] { Mf_1, code[nameof(Code.Fcom_m32fp)] },
					new object[] { Mf_1, code[nameof(Code.Fcomp_m32fp)] },
					new object[] { Mf_1, code[nameof(Code.Fsub_m32fp)] },
					new object[] { Mf_1, code[nameof(Code.Fsubr_m32fp)] },
					new object[] { Mf_1, code[nameof(Code.Fdiv_m32fp)] },
					new object[] { Mf_1, code[nameof(Code.Fdivr_m32fp)] },
				}),

				("handlers_FPU_D8_high",
				new object[8] {
					new object[] { ST_STi, code[nameof(Code.Fadd_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fmul_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcom_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomp_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fsub_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fsubr_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fdiv_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fdivr_st0_sti)] },
				}),

				("handlers_FPU_D9_low",
				new object[8] {
					new object[] { Mf_1, code[nameof(Code.Fld_m32fp)] },
					invalid,
					new object[] { Mf_1, code[nameof(Code.Fst_m32fp)] },
					new object[] { Mf_1, code[nameof(Code.Fstp_m32fp)] },
					new object[] { Mf_2a, code[nameof(Code.Fldenv_m14byte)], code[nameof(Code.Fldenv_m28byte)] },
					new object[] { Mf_1, code[nameof(Code.Fldcw_m2byte)] },
					new object[] { Mf_2b, code[nameof(Code.Fnstenv_m14byte)], code[nameof(Code.Fnstenv_m28byte)] },
					new object[] { Mf_1, code[nameof(Code.Fnstcw_m2byte)] },
				}),

				("handlers_FPU_D9_high",
				new object[0x40] {
					// C0
					new object[] { STi, code[nameof(Code.Fld_sti)] },
					new object[] { STi, code[nameof(Code.Fld_sti)] },
					new object[] { STi, code[nameof(Code.Fld_sti)] },
					new object[] { STi, code[nameof(Code.Fld_sti)] },
					new object[] { STi, code[nameof(Code.Fld_sti)] },
					new object[] { STi, code[nameof(Code.Fld_sti)] },
					new object[] { STi, code[nameof(Code.Fld_sti)] },
					new object[] { STi, code[nameof(Code.Fld_sti)] },

					// C8
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti)] },

					// D0
					new object[] { Simple, code[nameof(Code.Fnop)] },
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Cyrix_D9D7)] }, options[nameof(DecoderOptions.Cyrix)]
					},

					// D8
					new object[] { STi, code[nameof(Code.Fstpnce_sti)] },
					new object[] { STi, code[nameof(Code.Fstpnce_sti)] },
					new object[] { STi, code[nameof(Code.Fstpnce_sti)] },
					new object[] { STi, code[nameof(Code.Fstpnce_sti)] },
					new object[] { STi, code[nameof(Code.Fstpnce_sti)] },
					new object[] { STi, code[nameof(Code.Fstpnce_sti)] },
					new object[] { STi, code[nameof(Code.Fstpnce_sti)] },
					new object[] { STi, code[nameof(Code.Fstpnce_sti)] },

					// E0
					new object[] { Simple, code[nameof(Code.Fchs)] },
					new object[] { Simple, code[nameof(Code.Fabs)] },
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Cyrix_D9E2)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					invalid,
					new object[] { Simple, code[nameof(Code.Ftst)] },
					new object[] { Simple, code[nameof(Code.Fxam)] },
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Ftstp)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Cyrix_D9E7)] }, options[nameof(DecoderOptions.Cyrix)]
					},

					// E8
					new object[] { Simple, code[nameof(Code.Fld1)] },
					new object[] { Simple, code[nameof(Code.Fldl2t)] },
					new object[] { Simple, code[nameof(Code.Fldl2e)] },
					new object[] { Simple, code[nameof(Code.Fldpi)] },
					new object[] { Simple, code[nameof(Code.Fldlg2)] },
					new object[] { Simple, code[nameof(Code.Fldln2)] },
					new object[] { Simple, code[nameof(Code.Fldz)] },
					invalid,

					// F0
					new object[] { Simple, code[nameof(Code.F2xm1)] },
					new object[] { Simple, code[nameof(Code.Fyl2x)] },
					new object[] { Simple, code[nameof(Code.Fptan)] },
					new object[] { Simple, code[nameof(Code.Fpatan)] },
					new object[] { Simple, code[nameof(Code.Fxtract)] },
					new object[] { Simple, code[nameof(Code.Fprem1)] },
					new object[] { Simple, code[nameof(Code.Fdecstp)] },
					new object[] { Simple, code[nameof(Code.Fincstp)] },

					// F8
					new object[] { Simple, code[nameof(Code.Fprem)] },
					new object[] { Simple, code[nameof(Code.Fyl2xp1)] },
					new object[] { Simple, code[nameof(Code.Fsqrt)] },
					new object[] { Simple, code[nameof(Code.Fsincos)] },
					new object[] { Simple, code[nameof(Code.Frndint)] },
					new object[] { Simple, code[nameof(Code.Fscale)] },
					new object[] { Simple, code[nameof(Code.Fsin)] },
					new object[] { Simple, code[nameof(Code.Fcos)] },
				}),

				("handlers_FPU_DA_low",
				new object[8] {
					new object[] { Mf_1, code[nameof(Code.Fiadd_m32int)] },
					new object[] { Mf_1, code[nameof(Code.Fimul_m32int)] },
					new object[] { Mf_1, code[nameof(Code.Ficom_m32int)] },
					new object[] { Mf_1, code[nameof(Code.Ficomp_m32int)] },
					new object[] { Mf_1, code[nameof(Code.Fisub_m32int)] },
					new object[] { Mf_1, code[nameof(Code.Fisubr_m32int)] },
					new object[] { Mf_1, code[nameof(Code.Fidiv_m32int)] },
					new object[] { Mf_1, code[nameof(Code.Fidivr_m32int)] },
				}),

				("handlers_FPU_DA_high",
				new object[0x40] {
					// C0
					new object[] { ST_STi, code[nameof(Code.Fcmovb_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovb_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovb_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovb_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovb_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovb_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovb_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovb_st0_sti)] },

					// C8
					new object[] { ST_STi, code[nameof(Code.Fcmove_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmove_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmove_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmove_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmove_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmove_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmove_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmove_st0_sti)] },

					// D0
					new object[] { ST_STi, code[nameof(Code.Fcmovbe_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovbe_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovbe_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovbe_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovbe_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovbe_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovbe_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovbe_st0_sti)] },

					// D8
					new object[] { ST_STi, code[nameof(Code.Fcmovu_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovu_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovu_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovu_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovu_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovu_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovu_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovu_st0_sti)] },

					// E0
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// E8
					invalid,
					new object[] { Simple, code[nameof(Code.Fucompp)] },
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// F0
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// F8
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("handlers_FPU_DB_low",
				new object[8] {
					new object[] { Mf_1, code[nameof(Code.Fild_m32int)] },
					new object[] { Mf_1, code[nameof(Code.Fisttp_m32int)] },
					new object[] { Mf_1, code[nameof(Code.Fist_m32int)] },
					new object[] { Mf_1, code[nameof(Code.Fistp_m32int)] },
					invalid,
					new object[] { Mf_1, code[nameof(Code.Fld_m80fp)] },
					invalid,
					new object[] { Mf_1, code[nameof(Code.Fstp_m80fp)] },
				}),

				("handlers_FPU_DB_high",
				new object[0x40] {
					// C0
					new object[] { ST_STi, code[nameof(Code.Fcmovnb_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnb_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnb_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnb_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnb_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnb_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnb_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnb_st0_sti)] },

					// C8
					new object[] { ST_STi, code[nameof(Code.Fcmovne_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovne_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovne_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovne_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovne_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovne_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovne_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovne_st0_sti)] },

					// D0
					new object[] { ST_STi, code[nameof(Code.Fcmovnbe_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnbe_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnbe_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnbe_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnbe_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnbe_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnbe_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnbe_st0_sti)] },

					// D8
					new object[] { ST_STi, code[nameof(Code.Fcmovnu_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnu_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnu_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnu_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnu_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnu_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnu_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcmovnu_st0_sti)] },

					// E0
					new object[] { Simple, code[nameof(Code.Fneni)] },
					new object[] { Simple, code[nameof(Code.Fndisi)] },
					new object[] { Simple, code[nameof(Code.Fnclex)] },
					new object[] { Simple, code[nameof(Code.Fninit)] },
					new object[] { Simple, code[nameof(Code.Fnsetpm)] },
					new object[] { Bitness,
						new object[] { Options3,
							invalid,
							new object[] { Simple, code[nameof(Code.Frstpm)] }, options[nameof(DecoderOptions.OldFpu)]
						},
						invalid,
					},
					invalid,
					invalid,

					// E8
					new object[] { ST_STi, code[nameof(Code.Fucomi_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomi_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomi_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomi_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomi_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomi_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomi_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomi_st0_sti)] },

					// F0
					new object[] { ST_STi, code[nameof(Code.Fcomi_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomi_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomi_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomi_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomi_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomi_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomi_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomi_st0_sti)] },

					// F8
					invalid,
					invalid,
					invalid,
					invalid,
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Frint2)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					invalid,
					invalid,
					invalid,
				}),

				("handlers_FPU_DC_low",
				new object[8] {
					new object[] { Mf_1, code[nameof(Code.Fadd_m64fp)] },
					new object[] { Mf_1, code[nameof(Code.Fmul_m64fp)] },
					new object[] { Mf_1, code[nameof(Code.Fcom_m64fp)] },
					new object[] { Mf_1, code[nameof(Code.Fcomp_m64fp)] },
					new object[] { Mf_1, code[nameof(Code.Fsub_m64fp)] },
					new object[] { Mf_1, code[nameof(Code.Fsubr_m64fp)] },
					new object[] { Mf_1, code[nameof(Code.Fdiv_m64fp)] },
					new object[] { Mf_1, code[nameof(Code.Fdivr_m64fp)] },
				}),

				("handlers_FPU_DC_high",
				new object[8] {
					new object[] { STi_ST, code[nameof(Code.Fadd_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fmul_sti_st0)] },
					new object[] { ST_STi, code[nameof(Code.Fcom_st0_sti_DCD0)] },
					new object[] { ST_STi, code[nameof(Code.Fcomp_st0_sti_DCD8)] },
					new object[] { STi_ST, code[nameof(Code.Fsubr_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsub_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivr_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdiv_sti_st0)] },
				}),

				("handlers_FPU_DD_low",
				new object[8] {
					new object[] { Mf_1, code[nameof(Code.Fld_m64fp)] },
					new object[] { Mf_1, code[nameof(Code.Fisttp_m64int)] },
					new object[] { Mf_1, code[nameof(Code.Fst_m64fp)] },
					new object[] { Mf_1, code[nameof(Code.Fstp_m64fp)] },
					new object[] { Mf_2a, code[nameof(Code.Frstor_m94byte)], code[nameof(Code.Frstor_m108byte)] },
					invalid,
					new object[] { Mf_2b, code[nameof(Code.Fnsave_m94byte)], code[nameof(Code.Fnsave_m108byte)] },
					new object[] { Mf_1, code[nameof(Code.Fnstsw_m2byte)] },
				}),

				("handlers_FPU_DD_high",
				new object[0x40] {
					// C0
					new object[] { STi, code[nameof(Code.Ffree_sti)] },
					new object[] { STi, code[nameof(Code.Ffree_sti)] },
					new object[] { STi, code[nameof(Code.Ffree_sti)] },
					new object[] { STi, code[nameof(Code.Ffree_sti)] },
					new object[] { STi, code[nameof(Code.Ffree_sti)] },
					new object[] { STi, code[nameof(Code.Ffree_sti)] },
					new object[] { STi, code[nameof(Code.Ffree_sti)] },
					new object[] { STi, code[nameof(Code.Ffree_sti)] },

					// C8
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DDC8)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DDC8)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DDC8)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DDC8)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DDC8)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DDC8)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DDC8)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DDC8)] },

					// D0
					new object[] { STi, code[nameof(Code.Fst_sti)] },
					new object[] { STi, code[nameof(Code.Fst_sti)] },
					new object[] { STi, code[nameof(Code.Fst_sti)] },
					new object[] { STi, code[nameof(Code.Fst_sti)] },
					new object[] { STi, code[nameof(Code.Fst_sti)] },
					new object[] { STi, code[nameof(Code.Fst_sti)] },
					new object[] { STi, code[nameof(Code.Fst_sti)] },
					new object[] { STi, code[nameof(Code.Fst_sti)] },

					// D8
					new object[] { STi, code[nameof(Code.Fstp_sti)] },
					new object[] { STi, code[nameof(Code.Fstp_sti)] },
					new object[] { STi, code[nameof(Code.Fstp_sti)] },
					new object[] { STi, code[nameof(Code.Fstp_sti)] },
					new object[] { STi, code[nameof(Code.Fstp_sti)] },
					new object[] { STi, code[nameof(Code.Fstp_sti)] },
					new object[] { STi, code[nameof(Code.Fstp_sti)] },
					new object[] { STi, code[nameof(Code.Fstp_sti)] },

					// E0
					new object[] { ST_STi, code[nameof(Code.Fucom_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucom_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucom_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucom_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucom_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucom_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucom_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucom_st0_sti)] },

					// E8
					new object[] { ST_STi, code[nameof(Code.Fucomp_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomp_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomp_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomp_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomp_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomp_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomp_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomp_st0_sti)] },

					// F0
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// F8
					invalid,
					invalid,
					invalid,
					invalid,
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Frichop)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					invalid,
					invalid,
					invalid,
				}),

				("handlers_FPU_DE_low",
				new object[8] {
					new object[] { Mf_1, code[nameof(Code.Fiadd_m16int)] },
					new object[] { Mf_1, code[nameof(Code.Fimul_m16int)] },
					new object[] { Mf_1, code[nameof(Code.Ficom_m16int)] },
					new object[] { Mf_1, code[nameof(Code.Ficomp_m16int)] },
					new object[] { Mf_1, code[nameof(Code.Fisub_m16int)] },
					new object[] { Mf_1, code[nameof(Code.Fisubr_m16int)] },
					new object[] { Mf_1, code[nameof(Code.Fidiv_m16int)] },
					new object[] { Mf_1, code[nameof(Code.Fidivr_m16int)] },
				}),

				("handlers_FPU_DE_high",
				new object[0x40] {
					// C0
					new object[] { STi_ST, code[nameof(Code.Faddp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Faddp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Faddp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Faddp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Faddp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Faddp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Faddp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Faddp_sti_st0)] },

					// C8
					new object[] { STi_ST, code[nameof(Code.Fmulp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fmulp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fmulp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fmulp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fmulp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fmulp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fmulp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fmulp_sti_st0)] },

					// D0
					new object[] { ST_STi, code[nameof(Code.Fcomp_st0_sti_DED0)] },
					new object[] { ST_STi, code[nameof(Code.Fcomp_st0_sti_DED0)] },
					new object[] { ST_STi, code[nameof(Code.Fcomp_st0_sti_DED0)] },
					new object[] { ST_STi, code[nameof(Code.Fcomp_st0_sti_DED0)] },
					new object[] { ST_STi, code[nameof(Code.Fcomp_st0_sti_DED0)] },
					new object[] { ST_STi, code[nameof(Code.Fcomp_st0_sti_DED0)] },
					new object[] { ST_STi, code[nameof(Code.Fcomp_st0_sti_DED0)] },
					new object[] { ST_STi, code[nameof(Code.Fcomp_st0_sti_DED0)] },

					// D8
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Cyrix_DED8)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Simple, code[nameof(Code.Fcompp)] },
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Cyrix_DEDA)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					invalid,
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Cyrix_DEDC)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Cyrix_DEDD)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Cyrix_DEDE)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					invalid,

					// E0
					new object[] { STi_ST, code[nameof(Code.Fsubrp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsubrp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsubrp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsubrp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsubrp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsubrp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsubrp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsubrp_sti_st0)] },

					// E8
					new object[] { STi_ST, code[nameof(Code.Fsubp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsubp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsubp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsubp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsubp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsubp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsubp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fsubp_sti_st0)] },

					// F0
					new object[] { STi_ST, code[nameof(Code.Fdivrp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivrp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivrp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivrp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivrp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivrp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivrp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivrp_sti_st0)] },

					// F8
					new object[] { STi_ST, code[nameof(Code.Fdivp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivp_sti_st0)] },
					new object[] { STi_ST, code[nameof(Code.Fdivp_sti_st0)] },
				}),

				("handlers_FPU_DF_low",
				new object[8] {
					new object[] { Mf_1, code[nameof(Code.Fild_m16int)] },
					new object[] { Mf_1, code[nameof(Code.Fisttp_m16int)] },
					new object[] { Mf_1, code[nameof(Code.Fist_m16int)] },
					new object[] { Mf_1, code[nameof(Code.Fistp_m16int)] },
					new object[] { Mf_1, code[nameof(Code.Fbld_m80bcd)] },
					new object[] { Mf_1, code[nameof(Code.Fild_m64int)] },
					new object[] { Mf_1, code[nameof(Code.Fbstp_m80bcd)] },
					new object[] { Mf_1, code[nameof(Code.Fistp_m64int)] },
				}),

				("handlers_FPU_DF_high",
				new object[0x40] {
					// C0
					new object[] { STi, code[nameof(Code.Ffreep_sti)] },
					new object[] { STi, code[nameof(Code.Ffreep_sti)] },
					new object[] { STi, code[nameof(Code.Ffreep_sti)] },
					new object[] { STi, code[nameof(Code.Ffreep_sti)] },
					new object[] { STi, code[nameof(Code.Ffreep_sti)] },
					new object[] { STi, code[nameof(Code.Ffreep_sti)] },
					new object[] { STi, code[nameof(Code.Ffreep_sti)] },
					new object[] { STi, code[nameof(Code.Ffreep_sti)] },

					// C8
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DFC8)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DFC8)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DFC8)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DFC8)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DFC8)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DFC8)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DFC8)] },
					new object[] { ST_STi, code[nameof(Code.Fxch_st0_sti_DFC8)] },

					// D0
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD0)] },
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD0)] },
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD0)] },
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD0)] },
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD0)] },
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD0)] },
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD0)] },
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD0)] },

					// D8
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD8)] },
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD8)] },
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD8)] },
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD8)] },
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD8)] },
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD8)] },
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD8)] },
					new object[] { STi, code[nameof(Code.Fstp_sti_DFD8)] },

					// E0
					new object[] { Reg, code[nameof(Code.Fnstsw_AX)], ax },
					new object[] { Bitness,
						new object[] { Options3,
							invalid,
							new object[] { Reg, code[nameof(Code.Fnstdw_AX)], ax }, options[nameof(DecoderOptions.OldFpu)]
						},
						invalid,
					},
					new object[] { Bitness,
						new object[] { Options3,
							invalid,
							new object[] { Reg, code[nameof(Code.Fnstsg_AX)], ax }, options[nameof(DecoderOptions.OldFpu)]
						},
						invalid,
					},
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// E8
					new object[] { ST_STi, code[nameof(Code.Fucomip_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomip_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomip_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomip_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomip_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomip_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomip_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fucomip_st0_sti)] },

					// F0
					new object[] { ST_STi, code[nameof(Code.Fcomip_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomip_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomip_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomip_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomip_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomip_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomip_st0_sti)] },
					new object[] { ST_STi, code[nameof(Code.Fcomip_st0_sti)] },

					// F8
					invalid,
					invalid,
					invalid,
					invalid,
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Frinear)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					invalid,
					invalid,
					invalid,
				}),

				("handlers_Grp_80",
				new object[8] {
					new object[] { Eb_Ib_2, code[nameof(Code.Add_rm8_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_Ib_2, code[nameof(Code.Or_rm8_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_Ib_2, code[nameof(Code.Adc_rm8_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_Ib_2, code[nameof(Code.Sbb_rm8_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_Ib_2, code[nameof(Code.And_rm8_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_Ib_2, code[nameof(Code.Sub_rm8_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_Ib_2, code[nameof(Code.Xor_rm8_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_Ib_1, code[nameof(Code.Cmp_rm8_imm8)] },
				}),

				("handlers_Grp_81",
				new object[8] {
					new object[] { Ev_Iz_4, code[nameof(Code.Add_rm16_imm16)], code[nameof(Code.Add_rm32_imm32)], code[nameof(Code.Add_rm64_imm32)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Iz_4, code[nameof(Code.Or_rm16_imm16)], code[nameof(Code.Or_rm32_imm32)], code[nameof(Code.Or_rm64_imm32)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Iz_4, code[nameof(Code.Adc_rm16_imm16)], code[nameof(Code.Adc_rm32_imm32)], code[nameof(Code.Adc_rm64_imm32)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Iz_4, code[nameof(Code.Sbb_rm16_imm16)], code[nameof(Code.Sbb_rm32_imm32)], code[nameof(Code.Sbb_rm64_imm32)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Iz_4, code[nameof(Code.And_rm16_imm16)], code[nameof(Code.And_rm32_imm32)], code[nameof(Code.And_rm64_imm32)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Iz_4, code[nameof(Code.Sub_rm16_imm16)], code[nameof(Code.Sub_rm32_imm32)], code[nameof(Code.Sub_rm64_imm32)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Iz_4, code[nameof(Code.Xor_rm16_imm16)], code[nameof(Code.Xor_rm32_imm32)], code[nameof(Code.Xor_rm64_imm32)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Iz_3, code[nameof(Code.Cmp_rm16_imm16)], code[nameof(Code.Cmp_rm32_imm32)], code[nameof(Code.Cmp_rm64_imm32)] },
				}),

				("handlers_Grp_82",
				new object[8] {
					new object[] { Eb_Ib_2, code[nameof(Code.Add_rm8_imm8_82)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_Ib_2, code[nameof(Code.Or_rm8_imm8_82)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_Ib_2, code[nameof(Code.Adc_rm8_imm8_82)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_Ib_2, code[nameof(Code.Sbb_rm8_imm8_82)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_Ib_2, code[nameof(Code.And_rm8_imm8_82)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_Ib_2, code[nameof(Code.Sub_rm8_imm8_82)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_Ib_2, code[nameof(Code.Xor_rm8_imm8_82)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_Ib_1, code[nameof(Code.Cmp_rm8_imm8_82)] },
				}),

				("handlers_Grp_83",
				new object[8] {
					new object[] { Ev_Ib_4, code[nameof(Code.Add_rm16_imm8)], code[nameof(Code.Add_rm32_imm8)], code[nameof(Code.Add_rm64_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Ib_4, code[nameof(Code.Or_rm16_imm8)], code[nameof(Code.Or_rm32_imm8)], code[nameof(Code.Or_rm64_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Ib_4, code[nameof(Code.Adc_rm16_imm8)], code[nameof(Code.Adc_rm32_imm8)], code[nameof(Code.Adc_rm64_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Ib_4, code[nameof(Code.Sbb_rm16_imm8)], code[nameof(Code.Sbb_rm32_imm8)], code[nameof(Code.Sbb_rm64_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Ib_4, code[nameof(Code.And_rm16_imm8)], code[nameof(Code.And_rm32_imm8)], code[nameof(Code.And_rm64_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Ib_4, code[nameof(Code.Sub_rm16_imm8)], code[nameof(Code.Sub_rm32_imm8)], code[nameof(Code.Sub_rm64_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Ib_4, code[nameof(Code.Xor_rm16_imm8)], code[nameof(Code.Xor_rm32_imm8)], code[nameof(Code.Xor_rm64_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Ib_3, code[nameof(Code.Cmp_rm16_imm8)], code[nameof(Code.Cmp_rm32_imm8)], code[nameof(Code.Cmp_rm64_imm8)] },
				}),

				("handlers_Grp_8F",
				new object[8] {
					new object[] { PushEv, code[nameof(Code.Pop_rm16)], code[nameof(Code.Pop_rm32)], code[nameof(Code.Pop_rm64)] },
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("handlers_Grp_C0",
				new object[8] {
					new object[] { Eb_Ib_1, code[nameof(Code.Rol_rm8_imm8)] },
					new object[] { Eb_Ib_1, code[nameof(Code.Ror_rm8_imm8)] },
					new object[] { Eb_Ib_1, code[nameof(Code.Rcl_rm8_imm8)] },
					new object[] { Eb_Ib_1, code[nameof(Code.Rcr_rm8_imm8)] },
					new object[] { Eb_Ib_1, code[nameof(Code.Shl_rm8_imm8)] },
					new object[] { Eb_Ib_1, code[nameof(Code.Shr_rm8_imm8)] },
					new object[] { Eb_Ib_1, code[nameof(Code.Sal_rm8_imm8)] },
					new object[] { Eb_Ib_1, code[nameof(Code.Sar_rm8_imm8)] },
				}),

				("handlers_Grp_C1",
				new object[8] {
					new object[] { Ev_Ib2_3, code[nameof(Code.Rol_rm16_imm8)], code[nameof(Code.Rol_rm32_imm8)], code[nameof(Code.Rol_rm64_imm8)] },
					new object[] { Ev_Ib2_3, code[nameof(Code.Ror_rm16_imm8)], code[nameof(Code.Ror_rm32_imm8)], code[nameof(Code.Ror_rm64_imm8)] },
					new object[] { Ev_Ib2_3, code[nameof(Code.Rcl_rm16_imm8)], code[nameof(Code.Rcl_rm32_imm8)], code[nameof(Code.Rcl_rm64_imm8)] },
					new object[] { Ev_Ib2_3, code[nameof(Code.Rcr_rm16_imm8)], code[nameof(Code.Rcr_rm32_imm8)], code[nameof(Code.Rcr_rm64_imm8)] },
					new object[] { Ev_Ib2_3, code[nameof(Code.Shl_rm16_imm8)], code[nameof(Code.Shl_rm32_imm8)], code[nameof(Code.Shl_rm64_imm8)] },
					new object[] { Ev_Ib2_3, code[nameof(Code.Shr_rm16_imm8)], code[nameof(Code.Shr_rm32_imm8)], code[nameof(Code.Shr_rm64_imm8)] },
					new object[] { Ev_Ib2_3, code[nameof(Code.Sal_rm16_imm8)], code[nameof(Code.Sal_rm32_imm8)], code[nameof(Code.Sal_rm64_imm8)] },
					new object[] { Ev_Ib2_3, code[nameof(Code.Sar_rm16_imm8)], code[nameof(Code.Sar_rm32_imm8)], code[nameof(Code.Sar_rm64_imm8)] },
				}),

				("handlers_Grp_D0",
				new object[8] {
					new object[] { Eb1, code[nameof(Code.Rol_rm8_1)] },
					new object[] { Eb1, code[nameof(Code.Ror_rm8_1)] },
					new object[] { Eb1, code[nameof(Code.Rcl_rm8_1)] },
					new object[] { Eb1, code[nameof(Code.Rcr_rm8_1)] },
					new object[] { Eb1, code[nameof(Code.Shl_rm8_1)] },
					new object[] { Eb1, code[nameof(Code.Shr_rm8_1)] },
					new object[] { Eb1, code[nameof(Code.Sal_rm8_1)] },
					new object[] { Eb1, code[nameof(Code.Sar_rm8_1)] },
				}),

				("handlers_Grp_D1",
				new object[8] {
					new object[] { Ev1, code[nameof(Code.Rol_rm16_1)], code[nameof(Code.Rol_rm32_1)], code[nameof(Code.Rol_rm64_1)] },
					new object[] { Ev1, code[nameof(Code.Ror_rm16_1)], code[nameof(Code.Ror_rm32_1)], code[nameof(Code.Ror_rm64_1)] },
					new object[] { Ev1, code[nameof(Code.Rcl_rm16_1)], code[nameof(Code.Rcl_rm32_1)], code[nameof(Code.Rcl_rm64_1)] },
					new object[] { Ev1, code[nameof(Code.Rcr_rm16_1)], code[nameof(Code.Rcr_rm32_1)], code[nameof(Code.Rcr_rm64_1)] },
					new object[] { Ev1, code[nameof(Code.Shl_rm16_1)], code[nameof(Code.Shl_rm32_1)], code[nameof(Code.Shl_rm64_1)] },
					new object[] { Ev1, code[nameof(Code.Shr_rm16_1)], code[nameof(Code.Shr_rm32_1)], code[nameof(Code.Shr_rm64_1)] },
					new object[] { Ev1, code[nameof(Code.Sal_rm16_1)], code[nameof(Code.Sal_rm32_1)], code[nameof(Code.Sal_rm64_1)] },
					new object[] { Ev1, code[nameof(Code.Sar_rm16_1)], code[nameof(Code.Sar_rm32_1)], code[nameof(Code.Sar_rm64_1)] },
				}),

				("handlers_Grp_D2",
				new object[8] {
					new object[] { Eb_CL, code[nameof(Code.Rol_rm8_CL)] },
					new object[] { Eb_CL, code[nameof(Code.Ror_rm8_CL)] },
					new object[] { Eb_CL, code[nameof(Code.Rcl_rm8_CL)] },
					new object[] { Eb_CL, code[nameof(Code.Rcr_rm8_CL)] },
					new object[] { Eb_CL, code[nameof(Code.Shl_rm8_CL)] },
					new object[] { Eb_CL, code[nameof(Code.Shr_rm8_CL)] },
					new object[] { Eb_CL, code[nameof(Code.Sal_rm8_CL)] },
					new object[] { Eb_CL, code[nameof(Code.Sar_rm8_CL)] },
				}),

				("handlers_Grp_D3",
				new object[8] {
					new object[] { Ev_CL, code[nameof(Code.Rol_rm16_CL)], code[nameof(Code.Rol_rm32_CL)], code[nameof(Code.Rol_rm64_CL)] },
					new object[] { Ev_CL, code[nameof(Code.Ror_rm16_CL)], code[nameof(Code.Ror_rm32_CL)], code[nameof(Code.Ror_rm64_CL)] },
					new object[] { Ev_CL, code[nameof(Code.Rcl_rm16_CL)], code[nameof(Code.Rcl_rm32_CL)], code[nameof(Code.Rcl_rm64_CL)] },
					new object[] { Ev_CL, code[nameof(Code.Rcr_rm16_CL)], code[nameof(Code.Rcr_rm32_CL)], code[nameof(Code.Rcr_rm64_CL)] },
					new object[] { Ev_CL, code[nameof(Code.Shl_rm16_CL)], code[nameof(Code.Shl_rm32_CL)], code[nameof(Code.Shl_rm64_CL)] },
					new object[] { Ev_CL, code[nameof(Code.Shr_rm16_CL)], code[nameof(Code.Shr_rm32_CL)], code[nameof(Code.Shr_rm64_CL)] },
					new object[] { Ev_CL, code[nameof(Code.Sal_rm16_CL)], code[nameof(Code.Sal_rm32_CL)], code[nameof(Code.Sal_rm64_CL)] },
					new object[] { Ev_CL, code[nameof(Code.Sar_rm16_CL)], code[nameof(Code.Sar_rm32_CL)], code[nameof(Code.Sar_rm64_CL)] },
				}),

				("handlers_Grp_F6",
				new object[8] {
					new object[] { Eb_Ib_1, code[nameof(Code.Test_rm8_imm8)] },
					new object[] { Eb_Ib_1, code[nameof(Code.Test_rm8_imm8_F6r1)] },
					new object[] { Eb_2, code[nameof(Code.Not_rm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_2, code[nameof(Code.Neg_rm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_1, code[nameof(Code.Mul_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Imul_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Div_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Idiv_rm8)] },
				}),

				("handlers_Grp_F7",
				new object[8] {
					new object[] { Ev_Iz_3, code[nameof(Code.Test_rm16_imm16)], code[nameof(Code.Test_rm32_imm32)], code[nameof(Code.Test_rm64_imm32)] },
					new object[] { Ev_Iz_3, code[nameof(Code.Test_rm16_imm16_F7r1)], code[nameof(Code.Test_rm32_imm32_F7r1)], code[nameof(Code.Test_rm64_imm32_F7r1)] },
					new object[] { Ev_4, code[nameof(Code.Not_rm16)], code[nameof(Code.Not_rm32)], code[nameof(Code.Not_rm64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_4, code[nameof(Code.Neg_rm16)], code[nameof(Code.Neg_rm32)], code[nameof(Code.Neg_rm64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_3a, code[nameof(Code.Mul_rm16)], code[nameof(Code.Mul_rm32)], code[nameof(Code.Mul_rm64)] },
					new object[] { Ev_3a, code[nameof(Code.Imul_rm16)], code[nameof(Code.Imul_rm32)], code[nameof(Code.Imul_rm64)] },
					new object[] { Ev_3a, code[nameof(Code.Div_rm16)], code[nameof(Code.Div_rm32)], code[nameof(Code.Div_rm64)] },
					new object[] { Ev_3a, code[nameof(Code.Idiv_rm16)], code[nameof(Code.Idiv_rm32)], code[nameof(Code.Idiv_rm64)] },
				}),

				("handlers_Grp_FE",
				new object[8] {
					new object[] { Eb_2, code[nameof(Code.Inc_rm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Eb_2, code[nameof(Code.Dec_rm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("handlers_Grp_FF",
				new object[8] {
					new object[] { Ev_4, code[nameof(Code.Inc_rm16)], code[nameof(Code.Inc_rm32)], code[nameof(Code.Inc_rm64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_4, code[nameof(Code.Dec_rm16)], code[nameof(Code.Dec_rm32)], code[nameof(Code.Dec_rm64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Evj, code[nameof(Code.Call_rm16)], code[nameof(Code.Call_rm32)], code[nameof(Code.Call_rm64)] },
					new object[] { Ep, code[nameof(Code.Call_m1616)], code[nameof(Code.Call_m1632)], code[nameof(Code.Call_m1664)] },
					new object[] { Evj, code[nameof(Code.Jmp_rm16)], code[nameof(Code.Jmp_rm32)], code[nameof(Code.Jmp_rm64)] },
					new object[] { Ep, code[nameof(Code.Jmp_m1616)], code[nameof(Code.Jmp_m1632)], code[nameof(Code.Jmp_m1664)] },
					new object[] { PushEv, code[nameof(Code.Push_rm16)], code[nameof(Code.Push_rm32)], code[nameof(Code.Push_rm64)] },
					invalid,
				}),

				("handlers_Grp_0F00",
				new object[8] {
					new object[] { Evw, code[nameof(Code.Sldt_rm16)], code[nameof(Code.Sldt_r32m16)], code[nameof(Code.Sldt_r64m16)] },
					new object[] { Evw, code[nameof(Code.Str_rm16)], code[nameof(Code.Str_r32m16)], code[nameof(Code.Str_r64m16)] },
					new object[] { Ew, code[nameof(Code.Lldt_rm16)], code[nameof(Code.Lldt_r32m16)], code[nameof(Code.Lldt_r64m16)] },
					new object[] { Ew, code[nameof(Code.Ltr_rm16)], code[nameof(Code.Ltr_r32m16)], code[nameof(Code.Ltr_r64m16)] },
					new object[] { Ew, code[nameof(Code.Verr_rm16)], code[nameof(Code.Verr_r32m16)], code[nameof(Code.Verr_r64m16)] },
					new object[] { Ew, code[nameof(Code.Verw_rm16)], code[nameof(Code.Verw_r32m16)], code[nameof(Code.Verw_r64m16)] },
					new object[] { Options_DontReadModRM,
						new object[] { MandatoryPrefix,
							invalid,
							invalid,
							invalid,
							new object[] { Bitness_DontReadModRM,
								invalid,
								new object[] { Evw, code[nameof(Code.Lkgs_rm16)], code[nameof(Code.Lkgs_r32m16)], code[nameof(Code.Lkgs_r64m16)] },
							},
						},
						new object[] { Bitness_DontReadModRM,
							new object[] { Ev_3b, code[nameof(Code.Jmpe_rm16)], code[nameof(Code.Jmpe_rm32)] },
							new object[] { MandatoryPrefix,
								invalid,
								invalid,
								invalid,
								new object[] { Bitness_DontReadModRM,
									invalid,
									new object[] { Evw, code[nameof(Code.Lkgs_rm16)], code[nameof(Code.Lkgs_r32m16)], code[nameof(Code.Lkgs_r64m16)] },
								},
							},
						}, options[nameof(DecoderOptions.Jmpe)]
					},
					invalid,
				}),

				("handlers_Grp_0F01_lo",
				new object[8] {
					new object[] { RM,
						invalid,
						new object[] { Ms, code[nameof(Code.Sgdt_m1632_16)], code[nameof(Code.Sgdt_m1632)], code[nameof(Code.Sgdt_m1664)] },
					},
					new object[] { RM,
						invalid,
						new object[] { Ms, code[nameof(Code.Sidt_m1632_16)], code[nameof(Code.Sidt_m1632)], code[nameof(Code.Sidt_m1664)] },
					},
					new object[] { RM,
						invalid,
						new object[] { Ms, code[nameof(Code.Lgdt_m1632_16)], code[nameof(Code.Lgdt_m1632)], code[nameof(Code.Lgdt_m1664)] },
					},
					new object[] { RM,
						invalid,
						new object[] { Ms, code[nameof(Code.Lidt_m1632_16)], code[nameof(Code.Lidt_m1632)], code[nameof(Code.Lidt_m1664)] },
					},
					new object[] { Evw, code[nameof(Code.Smsw_rm16)], code[nameof(Code.Smsw_r32m16)], code[nameof(Code.Smsw_r64m16)] },
					new object[] { MandatoryPrefix,
						invalid,
						invalid,
						new object[] { M_1, code[nameof(Code.Rstorssp_m64)] },
						invalid,
					},
					new object[] { Evw, code[nameof(Code.Lmsw_rm16)], code[nameof(Code.Lmsw_r32m16)], code[nameof(Code.Lmsw_r64m16)] },
					new object[] { M_1, code[nameof(Code.Invlpg_m)] },
				}),

				("handlers_Grp_0F01_hi",
				new object?[0x40] {
					// C0
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Enclv)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Vmcall)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Vmlaunch)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Vmresume)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Vmxoff)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Pconfig)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					null,
					null,

					// C8
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple5, code[nameof(Code.Monitorw)], code[nameof(Code.Monitord)], code[nameof(Code.Monitorq)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Mwait)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Clac)] },
						invalid_NoModRM,
						new object[] { Bitness,
							invalid_NoModRM,
							new object[] { Simple, code[nameof(Code.Eretu)] },
						},
						new object[] { Bitness,
							invalid_NoModRM,
							new object[] { Simple, code[nameof(Code.Erets)] },
						},
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Stac)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						invalid_NoModRM,
						new object[] { Simple, code[nameof(Code.Tdcall)] },
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						invalid_NoModRM,
						new object[] { Bitness,
							invalid_NoModRM,
							new object[] { Simple, code[nameof(Code.Seamret)] },
						},
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						invalid_NoModRM,
						new object[] { Bitness,
							invalid_NoModRM,
							new object[] { Simple, code[nameof(Code.Seamops)] },
						},
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Encls)] },
						new object[] { Bitness,
							invalid_NoModRM,
							new object[] { Simple, code[nameof(Code.Seamcall)] },
						},
						invalid_NoModRM,
						invalid_NoModRM,
					},

					// D0
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Xgetbv)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Xsetbv)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					null,
					null,
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Vmfunc)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Xend)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Xtest)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Enclu)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},

					// D8
					new object[] { Simple5, code[nameof(Code.Vmrunw)], code[nameof(Code.Vmrund)], code[nameof(Code.Vmrunq)] },
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Vmmcall)] },
						new object[] { Simple, code[nameof(Code.Vmmcall)] },
						new object[] { Simple, code[nameof(Code.Vmgexit)] },
						new object[] { Simple, code[nameof(Code.Vmgexit_F2)] },
					},
					new object[] { Simple5, code[nameof(Code.Vmloadw)], code[nameof(Code.Vmloadd)], code[nameof(Code.Vmloadq)] },
					new object[] { Simple5, code[nameof(Code.Vmsavew)], code[nameof(Code.Vmsaved)], code[nameof(Code.Vmsaveq)] },
					new object[] { Simple, code[nameof(Code.Stgi)] },
					new object[] { Simple, code[nameof(Code.Clgi)] },
					new object[] { Simple, code[nameof(Code.Skinit)] },
					new object[] { Simple5, code[nameof(Code.Invlpgaw)], code[nameof(Code.Invlpgad)], code[nameof(Code.Invlpgaq)] },

					// E0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// E8
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Serialize)] },
						invalid,
						new object[] { Simple_ModRM, code[nameof(Code.Setssbsy)] },
						new object[] { Simple_ModRM, code[nameof(Code.Xsusldtrk)] },
					},
					new object[] { MandatoryPrefix,
						invalid,
						invalid,
						invalid,
						new object[] { Simple_ModRM, code[nameof(Code.Xresldtrk)] },
					},
					new object[] { MandatoryPrefix,
						invalid,
						invalid,
						new object[] { Simple_ModRM, code[nameof(Code.Saveprevssp)] },
						invalid,
					},
					null,
					new object[] { MandatoryPrefix_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
						new object[] { Bitness,
							invalid_NoModRM,
							new object[] { Simple, code[nameof(Code.Uiret)] },
						},
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
						new object[] { Bitness,
							invalid_NoModRM,
							new object[] { Simple, code[nameof(Code.Testui)] },
						},
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Rdpkru)] },
						invalid_NoModRM,
						new object[] { Bitness,
						invalid_NoModRM,
							new object[] { Simple, code[nameof(Code.Clui)] },
						},
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Wrpkru)] },
						invalid_NoModRM,
						new object[] { Bitness,
							invalid_NoModRM,
							new object[] { Simple, code[nameof(Code.Stui)] },
						},
						invalid_NoModRM,
					},

					// F0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// F8
					new object[] { Bitness_DontReadModRM,
						invalid,
						new object[] { Simple, code[nameof(Code.Swapgs)] },
					},
					new object[] { Simple, code[nameof(Code.Rdtscp)] },
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple5, code[nameof(Code.Monitorxw)], code[nameof(Code.Monitorxd)], code[nameof(Code.Monitorxq)] },
						invalid_NoModRM,
						new object[] { Simple, code[nameof(Code.Mcommit)] },
						invalid_NoModRM,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Mwaitx)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},
					new object[] { Simple5, code[nameof(Code.Clzerow)], code[nameof(Code.Clzerod)], code[nameof(Code.Clzeroq)] },
					new object[] { Simple, code[nameof(Code.Rdpru)] },
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple5, code[nameof(Code.Invlpgbw)], code[nameof(Code.Invlpgbd)], code[nameof(Code.Invlpgbq)] },
						invalid_NoModRM,
						new object[] { Bitness,
							invalid_NoModRM,
							new object[] { Simple, code[nameof(Code.Rmpadjust)] },
						},
						new object[] { Bitness,
							invalid_NoModRM,
							new object[] { Simple, code[nameof(Code.Rmpupdate)] },
						},
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Tlbsync)] },
						invalid_NoModRM,
						new object[] { Bitness,
							invalid_NoModRM,
							new object[] { Simple, code[nameof(Code.Psmash)] },
						},
						new object[] { Simple5, code[nameof(Code.Pvalidatew)], code[nameof(Code.Pvalidated)], code[nameof(Code.Pvalidateq)] },
					},
				}),

				("handlers_Grp_0F36_Cyrix",
				new object[8] {
					new object[] { Ev_REXW_1a, code[nameof(Code.Rdshr_rm32)], 0x03 },
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("handlers_Grp_0F37_Cyrix",
				new object[8] {
					new object[] { Ev_REXW_1a, code[nameof(Code.Wrshr_rm32)], 0x03 },
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("handlers_Grp_0F7A_Cyrix",
				new object[8] {
					new object[] { RM,
						invalid,
						new object[] { Ev_REXW_1a, code[nameof(Code.Svldt_m80)], 0x02 },
					},
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("handlers_Grp_0F7B_Cyrix",
				new object[8] {
					new object[] { RM,
						invalid,
						new object[] { Ev_REXW_1a, code[nameof(Code.Rsldt_m80)], 0x02 },
					},
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("handlers_Grp_0F7C_Cyrix",
				new object[8] {
					new object[] { RM,
						invalid,
						new object[] { Ev_REXW_1a, code[nameof(Code.Svts_m80)], 0x02 },
					},
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("handlers_Grp_0F7D_Cyrix",
				new object[8] {
					new object[] { RM,
						invalid,
						new object[] { Ev_REXW_1a, code[nameof(Code.Rsts_m80)], 0x02 },
					},
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("handlers_Grp_0FA6",
				new object[8] {
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5_a32, code[nameof(Code.Montmul_16)], code[nameof(Code.Montmul_32)], code[nameof(Code.Montmul_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5, code[nameof(Code.Xsha1_16)], code[nameof(Code.Xsha1_32)], code[nameof(Code.Xsha1_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5, code[nameof(Code.Xsha256_16)], code[nameof(Code.Xsha256_32)], code[nameof(Code.Xsha256_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5, code[nameof(Code.Xsha512_alt_16)], code[nameof(Code.Xsha512_alt_32)], code[nameof(Code.Xsha512_alt_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5, code[nameof(Code.Xsha512_16)], code[nameof(Code.Xsha512_32)], code[nameof(Code.Xsha512_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5, code[nameof(Code.Ccs_hash_16)], code[nameof(Code.Ccs_hash_32)], code[nameof(Code.Ccs_hash_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5, code[nameof(Code.Via_undoc_F30FA6F0_16)], code[nameof(Code.Via_undoc_F30FA6F0_32)], code[nameof(Code.Via_undoc_F30FA6F0_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5, code[nameof(Code.Via_undoc_F30FA6F8_16)], code[nameof(Code.Via_undoc_F30FA6F8_32)], code[nameof(Code.Via_undoc_F30FA6F8_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
				}),

				("handlers_Grp_0FA7",
				new object[8] {
					new object[] { RM,
						new object[] { Simple5, code[nameof(Code.Xstore_16)], code[nameof(Code.Xstore_32)], code[nameof(Code.Xstore_64)] },
						invalid,
					},
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5, code[nameof(Code.Xcryptecb_16)], code[nameof(Code.Xcryptecb_32)], code[nameof(Code.Xcryptecb_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5, code[nameof(Code.Xcryptcbc_16)], code[nameof(Code.Xcryptcbc_32)], code[nameof(Code.Xcryptcbc_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5, code[nameof(Code.Xcryptctr_16)], code[nameof(Code.Xcryptctr_32)], code[nameof(Code.Xcryptctr_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5, code[nameof(Code.Xcryptcfb_16)], code[nameof(Code.Xcryptcfb_32)], code[nameof(Code.Xcryptcfb_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5, code[nameof(Code.Xcryptofb_16)], code[nameof(Code.Xcryptofb_32)], code[nameof(Code.Xcryptofb_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5, code[nameof(Code.Ccs_encrypt_16)], code[nameof(Code.Ccs_encrypt_32)], code[nameof(Code.Ccs_encrypt_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
					new object[] { RM,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Simple5, code[nameof(Code.Xstore_alt_16)], code[nameof(Code.Xstore_alt_32)], code[nameof(Code.Xstore_alt_64)] },
							invalid,
							0x00,
						},
						invalid,
					},
				}),

				("handlers_Grp_0FBA",
				new object[8] {
					invalid,
					invalid,
					invalid,
					invalid,
					new object[] { Ev_Ib2_3, code[nameof(Code.Bt_rm16_imm8)], code[nameof(Code.Bt_rm32_imm8)], code[nameof(Code.Bt_rm64_imm8)] },
					new object[] { Ev_Ib2_4, code[nameof(Code.Bts_rm16_imm8)], code[nameof(Code.Bts_rm32_imm8)], code[nameof(Code.Bts_rm64_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Ib2_4, code[nameof(Code.Btr_rm16_imm8)], code[nameof(Code.Btr_rm32_imm8)], code[nameof(Code.Btr_rm64_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Ib2_4, code[nameof(Code.Btc_rm16_imm8)], code[nameof(Code.Btc_rm32_imm8)], code[nameof(Code.Btc_rm64_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
				}),

				("handlers_Grp_0FC7",
				new object[8] {
					invalid,
					new object[] { M_REXW_4, code[nameof(Code.Cmpxchg8b_m64)], code[nameof(Code.Cmpxchg16b_m128)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)), handlerFlags[nameof(HandlerFlags.Lock)] },
					invalid,
					new object[] { MandatoryPrefix,
						new object[] { M_REXW_2, code[nameof(Code.Xrstors_mem)], code[nameof(Code.Xrstors64_mem)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { M_REXW_2, code[nameof(Code.Xsavec_mem)], code[nameof(Code.Xsavec64_mem)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { RM,
							invalid,
							new object[] { Ev_REXW, code[nameof(Code.Xsaves_mem)], code[nameof(Code.Xsaves64_mem)], 0x02 },
						},
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix3,
						new object[] { Rv, code[nameof(Code.Rdrand_r16)], code[nameof(Code.Rdrand_r32)], code[nameof(Code.Rdrand_r64)] },
						new object[] { M_1, code[nameof(Code.Vmptrld_m64)] },
						new object[] { Rv, code[nameof(Code.Rdrand_r16)], code[nameof(Code.Rdrand_r32)], code[nameof(Code.Rdrand_r64)] },
						new object[] { M_1, code[nameof(Code.Vmclear_m64)] },
						new object[] { Bitness_DontReadModRM,
							invalid,
							new object[] { Rq, code[nameof(Code.Senduipi_r64)] },
						},
						new object[] { M_1, code[nameof(Code.Vmxon_m64)] },
						invalid,
						invalid,
						new OrEnumValue(legacyHandlerFlags, nameof(LegacyHandlerFlags.HandlerReg), nameof(LegacyHandlerFlags.Handler66Reg))
					},
					new object[] { MandatoryPrefix3,
						new object[] { Rv, code[nameof(Code.Rdseed_r16)], code[nameof(Code.Rdseed_r32)], code[nameof(Code.Rdseed_r64)] },
						new object[] { M_1, code[nameof(Code.Vmptrst_m64)] },
						new object[] { Rv, code[nameof(Code.Rdseed_r16)], code[nameof(Code.Rdseed_r32)], code[nameof(Code.Rdseed_r64)] },
						invalid,
						new object[] { Rv_32_64, code[nameof(Code.Rdpid_r32)], code[nameof(Code.Rdpid_r64)] },
						invalid,
						invalid,
						invalid,
						new OrEnumValue(legacyHandlerFlags, nameof(LegacyHandlerFlags.HandlerReg), nameof(LegacyHandlerFlags.Handler66Reg))
					},
				}),

				("handlers_Grp_C6_lo",
				new object[8] {
					new object[] { Eb_Ib_2, code[nameof(Code.Mov_rm8_imm8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.XacquireXreleaseNoLock)) },
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("handlers_Grp_C6_hi",
				new object?[0x40] {
					// C0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// C8
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// D0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// D8
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// E0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// E8
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// F0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// F8
					new object[] { Ib3, code[nameof(Code.Xabort_imm8)] },
					null,
					null,
					null,
					null,
					null,
					null,
					null,
				}),

				("handlers_Grp_C7_lo",
				new object[8] {
					new object[] { Ev_Iz_4, code[nameof(Code.Mov_rm16_imm16)], code[nameof(Code.Mov_rm32_imm32)], code[nameof(Code.Mov_rm64_imm32)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.XacquireXreleaseNoLock)) },
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("handlers_Grp_C7_hi",
				new object?[0x40] {
					// C0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// C8
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// D0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// D8
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// E0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// E8
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// F0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// F8
					new object[] { Jx, code[nameof(Code.Xbegin_rel16)], code[nameof(Code.Xbegin_rel32)], code[nameof(Code.Xbegin_rel32)] },
					null,
					null,
					null,
					null,
					null,
					null,
					null,
				}),

				("handlers_Grp_0F71",
				new object[8] {
					invalid,
					invalid,
					new object[] { MandatoryPrefix,
						new object[] { NIb, code[nameof(Code.Psrlw_mm_imm8)] },
						new object[] { RIb, code[nameof(Code.Psrlw_xmm_imm8)] },
						invalid,
						invalid,
					},
					invalid,
					new object[] { MandatoryPrefix,
						new object[] { NIb, code[nameof(Code.Psraw_mm_imm8)] },
						new object[] { RIb, code[nameof(Code.Psraw_xmm_imm8)] },
						invalid,
						invalid,
					},
					invalid,
					new object[] { MandatoryPrefix,
						new object[] { NIb, code[nameof(Code.Psllw_mm_imm8)] },
						new object[] { RIb, code[nameof(Code.Psllw_xmm_imm8)] },
						invalid,
						invalid,
					},
					invalid,
				}),

				("handlers_Grp_0F72",
				new object[8] {
					invalid,
					invalid,
					new object[] { MandatoryPrefix,
						new object[] { NIb, code[nameof(Code.Psrld_mm_imm8)] },
						new object[] { RIb, code[nameof(Code.Psrld_xmm_imm8)] },
						invalid,
						invalid,
					},
					invalid,
					new object[] { MandatoryPrefix,
						new object[] { NIb, code[nameof(Code.Psrad_mm_imm8)] },
						new object[] { RIb, code[nameof(Code.Psrad_xmm_imm8)] },
						invalid,
						invalid,
					},
					invalid,
					new object[] { MandatoryPrefix,
						new object[] { NIb, code[nameof(Code.Pslld_mm_imm8)] },
						new object[] { RIb, code[nameof(Code.Pslld_xmm_imm8)] },
						invalid,
						invalid,
					},
					invalid,
				}),

				("handlers_Grp_0F73",
				new object[8] {
					invalid,
					invalid,
					new object[] { MandatoryPrefix,
						new object[] { NIb, code[nameof(Code.Psrlq_mm_imm8)] },
						new object[] { RIb, code[nameof(Code.Psrlq_xmm_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { RIb, code[nameof(Code.Psrldq_xmm_imm8)] },
						invalid,
						invalid,
					},
					invalid,
					invalid,
					new object[] { MandatoryPrefix,
						new object[] { NIb, code[nameof(Code.Psllq_mm_imm8)] },
						new object[] { RIb, code[nameof(Code.Psllq_xmm_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { RIb, code[nameof(Code.Pslldq_xmm_imm8)] },
						invalid,
						invalid,
					},
				}),

				("handlers_Grp_0FAE_lo",
				new object[8] {
					new object[] { MandatoryPrefix,
						new object[] { M_2, code[nameof(Code.Fxsave_m512byte)], code[nameof(Code.Fxsave64_m512byte)] },
						invalid,
						new object[] { Bitness_DontReadModRM,
							invalid,
							new object[] { RM,
								new object[] { Ev_REXW, code[nameof(Code.Rdfsbase_r32)], code[nameof(Code.Rdfsbase_r64)], 0x01 },
								invalid,
							},
						},
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { M_2, code[nameof(Code.Fxrstor_m512byte)], code[nameof(Code.Fxrstor64_m512byte)] },
						invalid,
						new object[] { Bitness_DontReadModRM,
							invalid,
							new object[] { RM,
								new object[] { Ev_REXW, code[nameof(Code.Rdgsbase_r32)], code[nameof(Code.Rdgsbase_r64)], 0x01 },
								invalid,
							},
						},
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { M_1, code[nameof(Code.Ldmxcsr_m32)] },
						invalid,
						new object[] { Bitness_DontReadModRM,
							invalid,
							new object[] { RM,
								new object[] { Ev_REXW, code[nameof(Code.Wrfsbase_r32)], code[nameof(Code.Wrfsbase_r64)], 0x01 },
								invalid,
							},
						},
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { M_1, code[nameof(Code.Stmxcsr_m32)] },
						invalid,
						new object[] { Bitness_DontReadModRM,
							invalid,
							new object[] { RM,
								new object[] { Ev_REXW, code[nameof(Code.Wrgsbase_r32)], code[nameof(Code.Wrgsbase_r64)], 0x01 },
								invalid,
							},
						},
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { M_2, code[nameof(Code.Xsave_mem)], code[nameof(Code.Xsave64_mem)] },
						invalid,
						new object[] { Ev_REXW, code[nameof(Code.Ptwrite_rm32)], code[nameof(Code.Ptwrite_rm64)], 0x07 },
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { M_2, code[nameof(Code.Xrstor_mem)], code[nameof(Code.Xrstor64_mem)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { M_2, code[nameof(Code.Xsaveopt_mem)], code[nameof(Code.Xsaveopt64_mem)] },
						new object[] { M_1, code[nameof(Code.Clwb_m8)] },
						new object[] { M_1, code[nameof(Code.Clrssbsy_m64)] },
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { M_1, code[nameof(Code.Clflush_m8)] },
						new object[] { M_1, code[nameof(Code.Clflushopt_m8)] },
						invalid,
						invalid,
					},
				}),

				("handlers_Grp_0FAE_hi",
				new object?[0x40] {
					// C0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// C8
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// D0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// D8
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// E0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// E8
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Lfence)] },
						invalid,
						new object[] { Ev_REXW, code[nameof(Code.Incsspd_r32)], code[nameof(Code.Incsspq_r64)], 0x01 },
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Lfence_E9)] },
						invalid,
						new object[] { Ev_REXW, code[nameof(Code.Incsspd_r32)], code[nameof(Code.Incsspq_r64)], 0x01 },
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Lfence_EA)] },
						invalid,
						new object[] { Ev_REXW, code[nameof(Code.Incsspd_r32)], code[nameof(Code.Incsspq_r64)], 0x01 },
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Lfence_EB)] },
						invalid,
						new object[] { Ev_REXW, code[nameof(Code.Incsspd_r32)], code[nameof(Code.Incsspq_r64)], 0x01 },
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Lfence_EC)] },
						invalid,
						new object[] { Ev_REXW, code[nameof(Code.Incsspd_r32)], code[nameof(Code.Incsspq_r64)], 0x01 },
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Lfence_ED)] },
						invalid,
						new object[] { Ev_REXW, code[nameof(Code.Incsspd_r32)], code[nameof(Code.Incsspq_r64)], 0x01 },
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Lfence_EE)] },
						invalid,
						new object[] { Ev_REXW, code[nameof(Code.Incsspd_r32)], code[nameof(Code.Incsspq_r64)], 0x01 },
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Lfence_EF)] },
						invalid,
						new object[] { Ev_REXW, code[nameof(Code.Incsspd_r32)], code[nameof(Code.Incsspq_r64)], 0x01 },
						invalid,
					},

					// F0
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Mfence)] },
						new object[] { Ev_REXW, code[nameof(Code.Tpause_r32)], code[nameof(Code.Tpause_r64)], 0x01 },
						new object[] { Simple5_ModRM_as, code[nameof(Code.Umonitor_r16)], code[nameof(Code.Umonitor_r32)], code[nameof(Code.Umonitor_r64)] },
						new object[] { Ev_REXW, code[nameof(Code.Umwait_r32)], code[nameof(Code.Umwait_r64)], 0x01 }
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Mfence_F1)] },
						new object[] { Ev_REXW, code[nameof(Code.Tpause_r32)], code[nameof(Code.Tpause_r64)], 0x01 },
						new object[] { Simple5_ModRM_as, code[nameof(Code.Umonitor_r16)], code[nameof(Code.Umonitor_r32)], code[nameof(Code.Umonitor_r64)] },
						new object[] { Ev_REXW, code[nameof(Code.Umwait_r32)], code[nameof(Code.Umwait_r64)], 0x01 }
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Mfence_F2)] },
						new object[] { Ev_REXW, code[nameof(Code.Tpause_r32)], code[nameof(Code.Tpause_r64)], 0x01 },
						new object[] { Simple5_ModRM_as, code[nameof(Code.Umonitor_r16)], code[nameof(Code.Umonitor_r32)], code[nameof(Code.Umonitor_r64)] },
						new object[] { Ev_REXW, code[nameof(Code.Umwait_r32)], code[nameof(Code.Umwait_r64)], 0x01 }
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Mfence_F3)] },
						new object[] { Ev_REXW, code[nameof(Code.Tpause_r32)], code[nameof(Code.Tpause_r64)], 0x01 },
						new object[] { Simple5_ModRM_as, code[nameof(Code.Umonitor_r16)], code[nameof(Code.Umonitor_r32)], code[nameof(Code.Umonitor_r64)] },
						new object[] { Ev_REXW, code[nameof(Code.Umwait_r32)], code[nameof(Code.Umwait_r64)], 0x01 }
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Mfence_F4)] },
						new object[] { Ev_REXW, code[nameof(Code.Tpause_r32)], code[nameof(Code.Tpause_r64)], 0x01 },
						new object[] { Simple5_ModRM_as, code[nameof(Code.Umonitor_r16)], code[nameof(Code.Umonitor_r32)], code[nameof(Code.Umonitor_r64)] },
						new object[] { Ev_REXW, code[nameof(Code.Umwait_r32)], code[nameof(Code.Umwait_r64)], 0x01 }
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Mfence_F5)] },
						new object[] { Ev_REXW, code[nameof(Code.Tpause_r32)], code[nameof(Code.Tpause_r64)], 0x01 },
						new object[] { Simple5_ModRM_as, code[nameof(Code.Umonitor_r16)], code[nameof(Code.Umonitor_r32)], code[nameof(Code.Umonitor_r64)] },
						new object[] { Ev_REXW, code[nameof(Code.Umwait_r32)], code[nameof(Code.Umwait_r64)], 0x01 }
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Mfence_F6)] },
						new object[] { Ev_REXW, code[nameof(Code.Tpause_r32)], code[nameof(Code.Tpause_r64)], 0x01 },
						new object[] { Simple5_ModRM_as, code[nameof(Code.Umonitor_r16)], code[nameof(Code.Umonitor_r32)], code[nameof(Code.Umonitor_r64)] },
						new object[] { Ev_REXW, code[nameof(Code.Umwait_r32)], code[nameof(Code.Umwait_r64)], 0x01 }
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Mfence_F7)] },
						new object[] { Ev_REXW, code[nameof(Code.Tpause_r32)], code[nameof(Code.Tpause_r64)], 0x01 },
						new object[] { Simple5_ModRM_as, code[nameof(Code.Umonitor_r16)], code[nameof(Code.Umonitor_r32)], code[nameof(Code.Umonitor_r64)] },
						new object[] { Ev_REXW, code[nameof(Code.Umwait_r32)], code[nameof(Code.Umwait_r64)], 0x01 }
					},

					// F8
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Sfence)] },
						new object[] { Options_DontReadModRM,
							invalid,
							new object[] { Simple_ModRM, code[nameof(Code.Pcommit)] }, options[nameof(DecoderOptions.Pcommit)]
						},
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Sfence_F9)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Sfence_FA)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Sfence_FB)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Sfence_FC)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Sfence_FD)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Sfence_FE)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Simple_ModRM, code[nameof(Code.Sfence_FF)] },
						invalid,
						invalid,
						invalid,
					},
				}),

				("reservedNop_0F0D", new object[] { Ev_Gv_3a, code[nameof(Code.Reservednop_rm16_r16_0F0D)], code[nameof(Code.Reservednop_rm32_r32_0F0D)], code[nameof(Code.Reservednop_rm64_r64_0F0D)] }),
				("reservedNop_0F18", new object[] { Ev_Gv_3a, code[nameof(Code.Reservednop_rm16_r16_0F18)], code[nameof(Code.Reservednop_rm32_r32_0F18)], code[nameof(Code.Reservednop_rm64_r64_0F18)] }),
				("reservedNop_0F19", new object[] { Ev_Gv_3a, code[nameof(Code.Reservednop_rm16_r16_0F19)], code[nameof(Code.Reservednop_rm32_r32_0F19)], code[nameof(Code.Reservednop_rm64_r64_0F19)] }),
				("reservedNop_0F1A", new object[] { Ev_Gv_3a, code[nameof(Code.Reservednop_rm16_r16_0F1A)], code[nameof(Code.Reservednop_rm32_r32_0F1A)], code[nameof(Code.Reservednop_rm64_r64_0F1A)] }),
				("reservedNop_0F1B", new object[] { Ev_Gv_3a, code[nameof(Code.Reservednop_rm16_r16_0F1B)], code[nameof(Code.Reservednop_rm32_r32_0F1B)], code[nameof(Code.Reservednop_rm64_r64_0F1B)] }),
				("reservedNop_0F1C", new object[] { Ev_Gv_3a, code[nameof(Code.Reservednop_rm16_r16_0F1C)], code[nameof(Code.Reservednop_rm32_r32_0F1C)], code[nameof(Code.Reservednop_rm64_r64_0F1C)] }),
				("reservedNop_0F1D", new object[] { Ev_Gv_3a, code[nameof(Code.Reservednop_rm16_r16_0F1D)], code[nameof(Code.Reservednop_rm32_r32_0F1D)], code[nameof(Code.Reservednop_rm64_r64_0F1D)] }),
				("reservedNop_0F1E", new object[] { Ev_Gv_3a, code[nameof(Code.Reservednop_rm16_r16_0F1E)], code[nameof(Code.Reservednop_rm32_r32_0F1E)], code[nameof(Code.Reservednop_rm64_r64_0F1E)] }),
				("reservedNop_0F1F", new object[] { Ev_Gv_3a, code[nameof(Code.Reservednop_rm16_r16_0F1F)], code[nameof(Code.Reservednop_rm32_r32_0F1F)], code[nameof(Code.Reservednop_rm64_r64_0F1F)] }),

				("handlers_Grp_0F0D_mem",
				new object[8] {
					new object[] { M_1, code[nameof(Code.Prefetch_m8)] },
					new object[] { M_1, code[nameof(Code.Prefetchw_m8)] },
					new object[] { M_1, code[nameof(Code.Prefetchwt1_m8)] },
					new object[] { M_1, code[nameof(Code.Prefetchreserved3_m8)] },
					new object[] { M_1, code[nameof(Code.Prefetchreserved4_m8)] },
					new object[] { M_1, code[nameof(Code.Prefetchreserved5_m8)] },
					new object[] { M_1, code[nameof(Code.Prefetchreserved6_m8)] },
					new object[] { M_1, code[nameof(Code.Prefetchreserved7_m8)] },
				}),
				("grp0F0D", new object[] { RM,
					"reservedNop_0F0D",
					new object[] { Group, "handlers_Grp_0F0D_mem" }
				}),

				("handlers_Grp_0F18_mem",
				new object[8] {
					new object[] { M_1, code[nameof(Code.Prefetchnta_m8)] },
					new object[] { M_1, code[nameof(Code.Prefetcht0_m8)] },
					new object[] { M_1, code[nameof(Code.Prefetcht1_m8)] },
					new object[] { M_1, code[nameof(Code.Prefetcht2_m8)] },
					"reservedNop_0F18",
					"reservedNop_0F18",
					"reservedNop_0F18",
					"reservedNop_0F18",
				}),
				("grp0F18", new object[] { Reservednop,
					"reservedNop_0F18",
					new object[] { RM,
						"reservedNop_0F18",
						new object[] { Group, "handlers_Grp_0F18_mem" }
					}
				}),

				("handlers_Grp_0F1C_mem",
				new object[8] {
					new object[] { MandatoryPrefix4,
						new object[] { M_1, code[nameof(Code.Cldemote_m8)] },
						"reservedNop_0F1C",
						"reservedNop_0F1C",
						"reservedNop_0F1C",
						0,
					},
					"reservedNop_0F1C",
					"reservedNop_0F1C",
					"reservedNop_0F1C",
					"reservedNop_0F1C",
					"reservedNop_0F1C",
					"reservedNop_0F1C",
					"reservedNop_0F1C",
				}),
				("grp0F1C", new object[] { Reservednop,
					"reservedNop_0F1C",
					new object[] { RM,
						"reservedNop_0F1C",
						new object[] { Group, "handlers_Grp_0F1C_mem" }
					}
				}),

				("handlers_Grp_0F1E_reg_lo",
				new object[8] {
					"reservedNop_0F1E",
					"reservedNop_0F1E",
					"reservedNop_0F1E",
					"reservedNop_0F1E",
					"reservedNop_0F1E",
					"reservedNop_0F1E",
					"reservedNop_0F1E",
					"reservedNop_0F1E",
				}),
				("grp0F1E_1", new object[] { MandatoryPrefix,
					"reservedNop_0F1E",
					"reservedNop_0F1E",
					new object[] { RM,
						new object[] { Ev_REXW, code[nameof(Code.Rdsspd_r32)], code[nameof(Code.Rdsspq_r64)], 0x01 },
						"reservedNop_0F1E"
					},
					"reservedNop_0F1E"
				}),
				("handlers_Grp_0F1E_reg_hi",
				new object?[0x40] {
					// C0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// C8
					"grp0F1E_1",
					"grp0F1E_1",
					"grp0F1E_1",
					"grp0F1E_1",
					"grp0F1E_1",
					"grp0F1E_1",
					"grp0F1E_1",
					"grp0F1E_1",

					// D0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// D8
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// E0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// E8
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// F0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// F8
					null,
					null,
					new object[] { MandatoryPrefix,
						"reservedNop_0F1E",
						"reservedNop_0F1E",
						new object[] { Simple_ModRM, code[nameof(Code.Endbr64)] },
						"reservedNop_0F1E",
					},
					new object[] { MandatoryPrefix,
						"reservedNop_0F1E",
						"reservedNop_0F1E",
						new object[] { Simple_ModRM, code[nameof(Code.Endbr32)] },
						"reservedNop_0F1E",
					},
					null,
					null,
					null,
					null,
				}),
				("grp0F1E", new object[] { Reservednop,
					"reservedNop_0F1E",
					new object[] { RM,
						new object[] { Group8x64, "handlers_Grp_0F1E_reg_lo", "handlers_Grp_0F1E_reg_hi" },
						"reservedNop_0F1E"
					}
				}),

				("handlers_Grp_0F1F",
				new object[8] {
					new object[] { Ev_3a, code[nameof(Code.Nop_rm16)], code[nameof(Code.Nop_rm32)], code[nameof(Code.Nop_rm64)] },
					"reservedNop_0F1F",
					"reservedNop_0F1F",
					"reservedNop_0F1F",
					"reservedNop_0F1F",
					"reservedNop_0F1F",
					"reservedNop_0F1F",
					"reservedNop_0F1F",
				}),
				("grp0F1F", new object[] { Reservednop,
					"reservedNop_0F1F",
					new object[] { Group, "handlers_Grp_0F1F" }
				}),

				("handlers_Grp_660F78",
				new object[8] {
					new object[] { RIbIb, code[nameof(Code.Extrq_xmm_imm8_imm8)] },
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("handlers_Grp_F30F38D8",
				new object[8] {
					new object[] { RM,
						invalid,
						new object[] { M_1, code[nameof(Code.Aesencwide128kl_m384)] },
					},
					new object[] { RM,
						invalid,
						new object[] { M_1, code[nameof(Code.Aesdecwide128kl_m384)] },
					},
					new object[] { RM,
						invalid,
						new object[] { M_1, code[nameof(Code.Aesencwide256kl_m512)] },
					},
					new object[] { RM,
						invalid,
						new object[] { M_1, code[nameof(Code.Aesdecwide256kl_m512)] },
					},
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("handlers_Grp_0F3AF0_lo",
				new object[8] {
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("handlers_Grp_0F3AF0_hi",
				new object?[0x40] {
					// C0
					new object[] { MandatoryPrefix_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
						new object[] { Ib, code[nameof(Code.Hreset_imm8)] },
						invalid_NoModRM,
					},
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// C8
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// D0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// D8
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// E0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// E8
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// F0
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,

					// F8
					null,
					null,
					null,
					null,
					null,
					null,
					null,
					null,
				}),

				("Handlers_0F38",
				new object[0x100] {
					// 00
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pshufb_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pshufb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Phaddw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Phaddw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Phaddd_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Phaddd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Phaddsw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Phaddsw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pmaddubsw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pmaddubsw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Phsubw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Phsubw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Phsubd_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Phsubd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Phsubsw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Phsubsw_xmm_xmmm128)] },
						invalid,
						invalid,
					},

					// 08
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psignb_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psignb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psignw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psignw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psignd_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psignd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pmulhrsw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pmulhrsw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					invalid,
					invalid,
					invalid,
					invalid,

					// 10
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pblendvb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					invalid,
					invalid,
					invalid,
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Blendvps_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Blendvpd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					invalid,
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Ptest_xmm_xmmm128)] },
						invalid,
						invalid,
					},

					// 18
					invalid,
					invalid,
					invalid,
					invalid,
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pabsb_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pabsb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pabsw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pabsw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pabsd_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pabsd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					invalid,

					// 20
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmovsxbw_xmm_xmmm64)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmovsxbd_xmm_xmmm32)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmovsxbq_xmm_xmmm16)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmovsxwd_xmm_xmmm64)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmovsxwq_xmm_xmmm32)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmovsxdq_xmm_xmmm64)] },
						invalid,
						invalid,
					},
					invalid,
					invalid,

					// 28
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmuldq_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pcmpeqq_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VM, code[nameof(Code.Movntdqa_xmm_m128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Packusdw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					invalid,
					invalid,
					invalid,
					invalid,

					// 30
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmovzxbw_xmm_xmmm64)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmovzxbd_xmm_xmmm32)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmovzxbq_xmm_xmmm16)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmovzxwd_xmm_xmmm64)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmovzxwq_xmm_xmmm32)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmovzxdq_xmm_xmmm64)] },
						invalid,
						invalid,
					},
					invalid,
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pcmpgtq_xmm_xmmm128)] },
						invalid,
						invalid,
					},

					// 38
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pminsb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pminsd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pminuw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pminud_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmaxsb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmaxsd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmaxuw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmaxud_xmm_xmmm128)] },
						invalid,
						invalid,
					},

					// 40
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Pmulld_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Phminposuw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 48
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 50
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 58
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 60
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 68
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 70
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 78
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 80
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { RM,
							invalid,
							new object[] { Gv_Ev_32_64, code[nameof(Code.Invept_r32_m128)], code[nameof(Code.Invept_r64_m128)], false, true },
						},
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { RM,
							invalid,
							new object[] { Gv_Ev_32_64, code[nameof(Code.Invvpid_r32_m128)], code[nameof(Code.Invvpid_r64_m128)], false, true },
						},
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { RM,
							invalid,
							new object[] { Gv_Ev_32_64, code[nameof(Code.Invpcid_r32_m128)], code[nameof(Code.Invpcid_r64_m128)], false, true },
						},
						invalid,
						invalid,
					},
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 88
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 90
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 98
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// A0
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// A8
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// B0
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// B8
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// C0
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// C8
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Sha1nexte_xmm_xmmm128)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Sha1msg1_xmm_xmmm128)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Sha1msg2_xmm_xmmm128)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Sha256rnds2_xmm_xmmm128)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Sha256msg1_xmm_xmmm128)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Sha256msg2_xmm_xmmm128)] },
						invalid,
						invalid,
						invalid,
					},
					invalid,
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Gf2p8mulb_xmm_xmmm128)] },
						invalid,
						invalid,
					},

					// D0
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// D8
					new object[] { MandatoryPrefix,
						invalid,
						invalid,
						new object[] { Group, "handlers_Grp_F30F38D8" },
						invalid,
					},
					invalid,
					invalid,
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Aesimc_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Aesenc_xmm_xmmm128)] },
						new object[] { VW_3, code[nameof(Code.Loadiwkey_xmm_xmm)], code[nameof(Code.Aesenc128kl_xmm_m384)] },
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Aesenclast_xmm_xmmm128)] },
						new object[] { RM,
							invalid,
							new object[] { VW_2, code[nameof(Code.Aesdec128kl_xmm_m384)] },
						},
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Aesdec_xmm_xmmm128)] },
						new object[] { RM,
							invalid,
							new object[] { VW_2, code[nameof(Code.Aesenc256kl_xmm_m512)] },
						},
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Aesdeclast_xmm_xmmm128)] },
						new object[] { RM,
							invalid,
							new object[] { VW_2, code[nameof(Code.Aesdec256kl_xmm_m512)] },
						},
						invalid,
					},

					// E0
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// E8
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// F0
					new object[] { MandatoryPrefix4,
						new object[] { Gv_Mv, code[nameof(Code.Movbe_r16_m16)], code[nameof(Code.Movbe_r32_m32)], code[nameof(Code.Movbe_r64_m64)] },
						new object[] { Gv_Mv, code[nameof(Code.Movbe_r16_m16)], code[nameof(Code.Movbe_r32_m32)], code[nameof(Code.Movbe_r64_m64)] },
						invalid,
						new object[] { Gv_Eb_REX, code[nameof(Code.Crc32_r32_rm8)], code[nameof(Code.Crc32_r64_rm8)] },
						0x1C,
					},
					new object[] { MandatoryPrefix4,
						new object[] { Mv_Gv, code[nameof(Code.Movbe_m16_r16)], code[nameof(Code.Movbe_m32_r32)], code[nameof(Code.Movbe_m64_r64)] },
						new object[] { Mv_Gv, code[nameof(Code.Movbe_m16_r16)], code[nameof(Code.Movbe_m32_r32)], code[nameof(Code.Movbe_m64_r64)] },
						invalid,
						new object[] { Gdq_Ev, code[nameof(Code.Crc32_r32_rm16)], code[nameof(Code.Crc32_r32_rm32)], code[nameof(Code.Crc32_r64_rm64)] },
						0x1C,
					},
					invalid,
					invalid,
					invalid,
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { RM,
							invalid,
							new object[] { Ev_Gv_REX, code[nameof(Code.Wrussd_m32_r32)], code[nameof(Code.Wrussq_m64_r64)] }
						},
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { RM,
							invalid,
							new object[] { Ev_Gv_REX, code[nameof(Code.Wrssd_m32_r32)], code[nameof(Code.Wrssq_m64_r64)] }
						},
						new object[] { Gv_Ev_REX, code[nameof(Code.Adcx_r32_rm32)], code[nameof(Code.Adcx_r64_rm64)] },
						new object[] { Gv_Ev_REX, code[nameof(Code.Adox_r32_rm32)], code[nameof(Code.Adox_r64_rm64)] },
						invalid,
					},
					invalid,

					// F8
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { Gv_M_as, code[nameof(Code.Movdir64b_r16_m512)], code[nameof(Code.Movdir64b_r32_m512)], code[nameof(Code.Movdir64b_r64_m512)] },
						new object[] { Gv_M_as, code[nameof(Code.Enqcmds_r16_m512)], code[nameof(Code.Enqcmds_r32_m512)], code[nameof(Code.Enqcmds_r64_m512)] },
						new object[] { Gv_M_as, code[nameof(Code.Enqcmd_r16_m512)], code[nameof(Code.Enqcmd_r32_m512)], code[nameof(Code.Enqcmd_r64_m512)] }
					},
					new object[] { MandatoryPrefix,
						new object[] { RM,
							invalid,
							new object[] { Ev_Gv_REX, code[nameof(Code.Movdiri_m32_r32)], code[nameof(Code.Movdiri_m64_r64)] }
						},
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						invalid,
						new object[] { RM,
							new object[] { Gd_Rd, code[nameof(Code.Encodekey128_r32_r32)] },
							invalid,
						},
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						invalid,
						new object[] { RM,
							new object[] { Gd_Rd, code[nameof(Code.Encodekey256_r32_r32)] },
							invalid,
						},
						invalid,
					},
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("Handlers_0F3A",
				new object[0x100] {
					// 00
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 08
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Roundps_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Roundpd_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Roundss_xmm_xmmm32_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Roundsd_xmm_xmmm64_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Blendps_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Blendpd_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Pblendw_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q_Ib, code[nameof(Code.Palignr_mm_mmm64_imm8)] },
						new object[] { VWIb_2, code[nameof(Code.Palignr_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},

					// 10
					invalid,
					invalid,
					invalid,
					invalid,
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { GvM_VX_Ib, code[nameof(Code.Pextrb_r32m8_xmm_imm8)], code[nameof(Code.Pextrb_r64m8_xmm_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { GvM_VX_Ib, code[nameof(Code.Pextrw_r32m16_xmm_imm8)], code[nameof(Code.Pextrw_r64m16_xmm_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { GvM_VX_Ib, code[nameof(Code.Pextrd_rm32_xmm_imm8)], code[nameof(Code.Pextrq_rm64_xmm_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { Ed_V_Ib, code[nameof(Code.Extractps_rm32_xmm_imm8)], code[nameof(Code.Extractps_r64m32_xmm_imm8)] },
						invalid,
						invalid,
					},

					// 18
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 20
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VX_E_Ib, code[nameof(Code.Pinsrb_xmm_r32m8_imm8)], code[nameof(Code.Pinsrb_xmm_r64m8_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Insertps_xmm_xmmm32_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VX_E_Ib, code[nameof(Code.Pinsrd_xmm_rm32_imm8)], code[nameof(Code.Pinsrq_xmm_rm64_imm8)] },
						invalid,
						invalid,
					},
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 28
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 30
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 38
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 40
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Dpps_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Dppd_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Mpsadbw_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					invalid,
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Pclmulqdq_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					invalid,
					invalid,
					invalid,

					// 48
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 50
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 58
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 60
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_3, code[nameof(Code.Pcmpestrm_xmm_xmmm128_imm8)], code[nameof(Code.Pcmpestrm64_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_3, code[nameof(Code.Pcmpestri_xmm_xmmm128_imm8)], code[nameof(Code.Pcmpestri64_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Pcmpistrm_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Pcmpistri_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					invalid,
					invalid,
					invalid,
					invalid,

					// 68
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 70
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 78
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 80
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 88
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 90
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// 98
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// A0
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// A8
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// B0
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// B8
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// C0
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// C8
					invalid,
					invalid,
					invalid,
					invalid,
					new object[] { MandatoryPrefix,
						new object[] { VWIb_2, code[nameof(Code.Sha1rnds4_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
						invalid,
					},
					invalid,
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Gf2p8affineqb_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Gf2p8affineinvqb_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},

					// D0
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// D8
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VWIb_2, code[nameof(Code.Aeskeygenassist_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},

					// E0
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// E8
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// F0
					new object[] { Group8x64, "handlers_Grp_0F3AF0_lo", "handlers_Grp_0F3AF0_hi" },
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,

					// F8
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
					invalid,
				}),

				("Handlers_0F",
				new object[0x100] {
					// 00
					new object[] { Group, "handlers_Grp_0F00" },
					new object[] { Group8x64, "handlers_Grp_0F01_lo", "handlers_Grp_0F01_hi" },
					new object[] { Gv_Ev3, code[nameof(Code.Lar_r16_rm16)], code[nameof(Code.Lar_r32_r32m16)], code[nameof(Code.Lar_r64_r64m16)] },
					new object[] { Gv_Ev3, code[nameof(Code.Lsl_r16_rm16)], code[nameof(Code.Lsl_r32_r32m16)], code[nameof(Code.Lsl_r64_r64m16)] },
					new object[] { Bitness,
						new object[] { Options3,
							invalid,
							new object[] { Simple, code[nameof(Code.Storeall)] }, options[nameof(DecoderOptions.Loadall286)]
						},
						invalid,
					},
					new object[] { Bitness,
						new object[] { Options3,
							new object[] { Simple, code[nameof(Code.Syscall)] },
							new object[] { Simple, code[nameof(Code.Loadall286)] }, options[nameof(DecoderOptions.Loadall286)]
						},
						new object[] { Simple, code[nameof(Code.Syscall)] },
					},
					new object[] { Simple, code[nameof(Code.Clts)] },
					new object[] { Bitness,
						new object[] { Options3,
							new object[] { Simple2_3b, code[nameof(Code.Sysretd)], code[nameof(Code.Sysretd)], code[nameof(Code.Sysretq)] },
							new object[] { Simple, code[nameof(Code.Loadall386)] }, options[nameof(DecoderOptions.Loadall386)]
						},
						new object[] { Simple2_3b, code[nameof(Code.Sysretd)], code[nameof(Code.Sysretd)], code[nameof(Code.Sysretq)] },
					},
					// 08
					new object[] { Simple, code[nameof(Code.Invd)] },
					new object[] { Wbinvd },
					new object[] { Bitness,
						new object[] { Options3,
							invalid,
							new object[] { Simple, code[nameof(Code.Cl1invmb)] }, options[nameof(DecoderOptions.Cl1invmb)]
						},
						invalid,
					},
					new object[] { Simple, code[nameof(Code.Ud2)] },
					invalid,
					new object[] { Reservednop,
						"reservedNop_0F0D",
						"grp0F0D"
					},
					new object[] { Options3,
						new object[] { Simple, code[nameof(Code.Femms)] },
						new object[] { Simple, code[nameof(Code.Rdudbg)] }, options[nameof(DecoderOptions.Udbg)]
					},
					new object[] { Options3,
						new object[] { D3NOW },
						new object[] { Simple, code[nameof(Code.Wrudbg)] }, options[nameof(DecoderOptions.Udbg)]
					},

					// 10
					new object[] { Bitness,
						new object[] { Options3,
							new object[] { MandatoryPrefix,
								new object[] { VW_2, code[nameof(Code.Movups_xmm_xmmm128)] },
								new object[] { VW_2, code[nameof(Code.Movupd_xmm_xmmm128)] },
								new object[] { VW_2, code[nameof(Code.Movss_xmm_xmmm32)] },
								new object[] { VW_2, code[nameof(Code.Movsd_xmm_xmmm64)] }
							},
							new object[] { Eb_Gb_1, code[nameof(Code.Umov_rm8_r8)] }, options[nameof(DecoderOptions.Umov)]
						},
						new object[] { MandatoryPrefix,
							new object[] { VW_2, code[nameof(Code.Movups_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Movupd_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Movss_xmm_xmmm32)] },
							new object[] { VW_2, code[nameof(Code.Movsd_xmm_xmmm64)] }
						},
					},
					new object[] { Bitness,
						new object[] { Options3,
							new object[] { MandatoryPrefix,
								new object[] { WV, code[nameof(Code.Movups_xmmm128_xmm)] },
								new object[] { WV, code[nameof(Code.Movupd_xmmm128_xmm)] },
								new object[] { WV, code[nameof(Code.Movss_xmmm32_xmm)] },
								new object[] { WV, code[nameof(Code.Movsd_xmmm64_xmm)] }
							},
							new object[] { Ev_Gv_3b, code[nameof(Code.Umov_rm16_r16)], code[nameof(Code.Umov_rm32_r32)] }, options[nameof(DecoderOptions.Umov)]
						},
						new object[] { MandatoryPrefix,
							new object[] { WV, code[nameof(Code.Movups_xmmm128_xmm)] },
							new object[] { WV, code[nameof(Code.Movupd_xmmm128_xmm)] },
							new object[] { WV, code[nameof(Code.Movss_xmmm32_xmm)] },
							new object[] { WV, code[nameof(Code.Movsd_xmmm64_xmm)] }
						},
					},
					new object[] { Bitness,
						new object[] { Options3,
							new object[] { MandatoryPrefix,
								new object[] { VW_3, code[nameof(Code.Movhlps_xmm_xmm)], code[nameof(Code.Movlps_xmm_m64)] },
								new object[] { VM, code[nameof(Code.Movlpd_xmm_m64)] },
								new object[] { VW_2, code[nameof(Code.Movsldup_xmm_xmmm128)] },
								new object[] { VW_2, code[nameof(Code.Movddup_xmm_xmmm64)] }
							},
							new object[] { Gb_Eb, code[nameof(Code.Umov_r8_rm8)] }, options[nameof(DecoderOptions.Umov)]
						},
						new object[] { MandatoryPrefix,
							new object[] { VW_3, code[nameof(Code.Movhlps_xmm_xmm)], code[nameof(Code.Movlps_xmm_m64)] },
							new object[] { VM, code[nameof(Code.Movlpd_xmm_m64)] },
							new object[] { VW_2, code[nameof(Code.Movsldup_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Movddup_xmm_xmmm64)] }
						},
					},
					new object[] { Bitness,
						new object[] { Options3,
							new object[] { MandatoryPrefix,
								new object[] { MV, code[nameof(Code.Movlps_m64_xmm)] },
								new object[] { MV, code[nameof(Code.Movlpd_m64_xmm)] },
								invalid,
								invalid,
							},
							new object[] { Gv_Ev_3b, code[nameof(Code.Umov_r16_rm16)], code[nameof(Code.Umov_r32_rm32)] }, options[nameof(DecoderOptions.Umov)]
						},
						new object[] { MandatoryPrefix,
							new object[] { MV, code[nameof(Code.Movlps_m64_xmm)] },
							new object[] { MV, code[nameof(Code.Movlpd_m64_xmm)] },
							invalid,
							invalid,
						},
					},
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Unpcklps_xmm_xmmm128)] },
						new object[] { VW_2, code[nameof(Code.Unpcklpd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Unpckhps_xmm_xmmm128)] },
						new object[] { VW_2, code[nameof(Code.Unpckhpd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { VW_3, code[nameof(Code.Movlhps_xmm_xmm)], code[nameof(Code.Movhps_xmm_m64)] },
						new object[] { VM, code[nameof(Code.Movhpd_xmm_m64)] },
						new object[] { VW_2, code[nameof(Code.Movshdup_xmm_xmmm128)] },
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { MV, code[nameof(Code.Movhps_m64_xmm)] },
						new object[] { MV, code[nameof(Code.Movhpd_m64_xmm)] },
						invalid,
						invalid,
					},

					// 18
					"grp0F18",
					"reservedNop_0F19",
					new object[] { Reservednop,
						"reservedNop_0F1A",
						new object[] { Options_DontReadModRM,
							"reservedNop_0F1A",
							new object[] { MandatoryPrefix,
								new object[] { RM,
									"reservedNop_0F1A",
									new object[] { B_MIB, code[nameof(Code.Bndldx_bnd_mib)] }
								},
								new object[] { B_BM, code[nameof(Code.Bndmov_bnd_bndm64)], code[nameof(Code.Bndmov_bnd_bndm128)] },
								new object[] { B_Ev, code[nameof(Code.Bndcl_bnd_rm32)], code[nameof(Code.Bndcl_bnd_rm64)], true },
								new object[] { B_Ev, code[nameof(Code.Bndcu_bnd_rm32)], code[nameof(Code.Bndcu_bnd_rm64)], true }
							}, options[nameof(DecoderOptions.MPX)]
						}
					},
					new object[] { Reservednop,
						"reservedNop_0F1B",
						new object[] { Options_DontReadModRM,
							"reservedNop_0F1B",
							new object[] { MandatoryPrefix,
								new object[] { RM,
									"reservedNop_0F1B",
									new object[] { MIB_B, code[nameof(Code.Bndstx_mib_bnd)] }
								},
								new object[] { BM_B, code[nameof(Code.Bndmov_bndm64_bnd)], code[nameof(Code.Bndmov_bndm128_bnd)] },
								new object[] { RM,
									"reservedNop_0F1B",
									new object[] { B_Ev, code[nameof(Code.Bndmk_bnd_m32)], code[nameof(Code.Bndmk_bnd_m64)], false }
								},
								new object[] { B_Ev, code[nameof(Code.Bndcn_bnd_rm32)], code[nameof(Code.Bndcn_bnd_rm64)], true }
							}, options[nameof(DecoderOptions.MPX)]
						}
					},
					"grp0F1C",
					"reservedNop_0F1D",
					"grp0F1E",
					"grp0F1F",

					// 20
					new object[] { R_C_3a, code[nameof(Code.Mov_r32_cr)], code[nameof(Code.Mov_r64_cr)], cr0 },
					new object[] { R_C_3a, code[nameof(Code.Mov_r32_dr)], code[nameof(Code.Mov_r64_dr)], dr0 },
					new object[] { C_R_3a, code[nameof(Code.Mov_cr_r32)], code[nameof(Code.Mov_cr_r64)], cr0 },
					new object[] { C_R_3a, code[nameof(Code.Mov_dr_r32)], code[nameof(Code.Mov_dr_r64)], dr0 },
					new object[] { Bitness,
						new object[] { Options3,
							invalid,
							new object[] { R_C_3b, code[nameof(Code.Mov_r32_tr)], tr0 }, options[nameof(DecoderOptions.MovTr)]
						},
						invalid,
					},
					invalid,
					new object[] { Bitness,
						new object[] { Options3,
							invalid,
							new object[] { C_R_3b, code[nameof(Code.Mov_tr_r32)], tr0 }, options[nameof(DecoderOptions.MovTr)]
						},
						invalid,
					},
					invalid,

					// 28
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Movaps_xmm_xmmm128)] },
						new object[] { VW_2, code[nameof(Code.Movapd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { WV, code[nameof(Code.Movaps_xmmm128_xmm)] },
						new object[] { WV, code[nameof(Code.Movapd_xmmm128_xmm)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { VQ, code[nameof(Code.Cvtpi2ps_xmm_mmm64)] },
						new object[] { VQ, code[nameof(Code.Cvtpi2pd_xmm_mmm64)] },
						new object[] { V_Ev, code[nameof(Code.Cvtsi2ss_xmm_rm32)], code[nameof(Code.Cvtsi2ss_xmm_rm64)] },
						new object[] { V_Ev, code[nameof(Code.Cvtsi2sd_xmm_rm32)], code[nameof(Code.Cvtsi2sd_xmm_rm64)] }
					},
					new object[] { MandatoryPrefix,
						new object[] { MV, code[nameof(Code.Movntps_m128_xmm)] },
						new object[] { MV, code[nameof(Code.Movntpd_m128_xmm)] },
						new object[] { MV, code[nameof(Code.Movntss_m32_xmm)] },
						new object[] { MV, code[nameof(Code.Movntsd_m64_xmm)] }
					},
					new object[] { MandatoryPrefix,
						new object[] { P_W, code[nameof(Code.Cvttps2pi_mm_xmmm64)] },
						new object[] { P_W, code[nameof(Code.Cvttpd2pi_mm_xmmm128)] },
						new object[] { Gv_W, code[nameof(Code.Cvttss2si_r32_xmmm32)], code[nameof(Code.Cvttss2si_r64_xmmm32)] },
						new object[] { Gv_W, code[nameof(Code.Cvttsd2si_r32_xmmm64)], code[nameof(Code.Cvttsd2si_r64_xmmm64)] }
					},
					new object[] { MandatoryPrefix,
						new object[] { P_W, code[nameof(Code.Cvtps2pi_mm_xmmm64)] },
						new object[] { P_W, code[nameof(Code.Cvtpd2pi_mm_xmmm128)] },
						new object[] { Gv_W, code[nameof(Code.Cvtss2si_r32_xmmm32)], code[nameof(Code.Cvtss2si_r64_xmmm32)] },
						new object[] { Gv_W, code[nameof(Code.Cvtsd2si_r32_xmmm64)], code[nameof(Code.Cvtsd2si_r64_xmmm64)] }
					},
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Ucomiss_xmm_xmmm32)] },
						new object[] { VW_2, code[nameof(Code.Ucomisd_xmm_xmmm64)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Comiss_xmm_xmmm32)] },
						new object[] { VW_2, code[nameof(Code.Comisd_xmm_xmmm64)] },
						invalid,
						invalid,
					},

					// 30
					new object[] { Simple, code[nameof(Code.Wrmsr)] },
					new object[] { Simple, code[nameof(Code.Rdtsc)] },
					new object[] { Simple, code[nameof(Code.Rdmsr)] },
					new object[] { Simple, code[nameof(Code.Rdpmc)] },
					new object[] { Simple, code[nameof(Code.Sysenter)] },
					new object[] { Simple4, code[nameof(Code.Sysexitd)], code[nameof(Code.Sysexitq)] },
					new object[] { Options1632_1,
						invalid,
						new object[] { Group, "handlers_Grp_0F36_Cyrix" }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix_NoModRM,
							new object[] { Simple4b, code[nameof(Code.Getsecd)], code[nameof(Code.Getsecq)] },
							invalid_NoModRM,
							invalid_NoModRM,
							invalid_NoModRM,
						},
						new object[] { Group, "handlers_Grp_0F37_Cyrix" }, options[nameof(DecoderOptions.Cyrix)]
					},

					// 38
					new object[] { Options1632_1,
						new object[] { AnotherTable, "Handlers_0F38" },
						new object[] { Simple, code[nameof(Code.Smint)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Dmint)] }, options[nameof(DecoderOptions.Cyrix_DMI)]
					},
					new object[] { Options1632_2,
						new object[] { AnotherTable, "Handlers_0F3A" },
						new object[] { Simple, code[nameof(Code.Rdm)] }, options[nameof(DecoderOptions.Cyrix_DMI)],
						new object[] { Simple, code[nameof(Code.Bb0_reset)] }, options[nameof(DecoderOptions.Cyrix)],
					},
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Bb1_reset)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Cpu_write)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Cpu_read)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					invalid,
					new object[] { Options1632_1,
						invalid,
						new object[] { Simple, code[nameof(Code.Altinst)] }, options[nameof(DecoderOptions.ALTINST)]
					},

					// 40
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmovo_r16_rm16)], code[nameof(Code.Cmovo_r32_rm32)], code[nameof(Code.Cmovo_r64_rm64)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmovno_r16_rm16)], code[nameof(Code.Cmovno_r32_rm32)], code[nameof(Code.Cmovno_r64_rm64)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmovb_r16_rm16)], code[nameof(Code.Cmovb_r32_rm32)], code[nameof(Code.Cmovb_r64_rm64)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmovae_r16_rm16)], code[nameof(Code.Cmovae_r32_rm32)], code[nameof(Code.Cmovae_r64_rm64)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmove_r16_rm16)], code[nameof(Code.Cmove_r32_rm32)], code[nameof(Code.Cmove_r64_rm64)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmovne_r16_rm16)], code[nameof(Code.Cmovne_r32_rm32)], code[nameof(Code.Cmovne_r64_rm64)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmovbe_r16_rm16)], code[nameof(Code.Cmovbe_r32_rm32)], code[nameof(Code.Cmovbe_r64_rm64)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmova_r16_rm16)], code[nameof(Code.Cmova_r32_rm32)], code[nameof(Code.Cmova_r64_rm64)] },

					// 48
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmovs_r16_rm16)], code[nameof(Code.Cmovs_r32_rm32)], code[nameof(Code.Cmovs_r64_rm64)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmovns_r16_rm16)], code[nameof(Code.Cmovns_r32_rm32)], code[nameof(Code.Cmovns_r64_rm64)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmovp_r16_rm16)], code[nameof(Code.Cmovp_r32_rm32)], code[nameof(Code.Cmovp_r64_rm64)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmovnp_r16_rm16)], code[nameof(Code.Cmovnp_r32_rm32)], code[nameof(Code.Cmovnp_r64_rm64)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmovl_r16_rm16)], code[nameof(Code.Cmovl_r32_rm32)], code[nameof(Code.Cmovl_r64_rm64)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmovge_r16_rm16)], code[nameof(Code.Cmovge_r32_rm32)], code[nameof(Code.Cmovge_r64_rm64)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmovle_r16_rm16)], code[nameof(Code.Cmovle_r32_rm32)], code[nameof(Code.Cmovle_r64_rm64)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmovg_r16_rm16)], code[nameof(Code.Cmovg_r32_rm32)], code[nameof(Code.Cmovg_r64_rm64)] },

					// 50
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { Gv_RX, code[nameof(Code.Movmskps_r32_xmm)], code[nameof(Code.Movmskps_r64_xmm)] },
							new object[] { Gv_RX, code[nameof(Code.Movmskpd_r32_xmm)], code[nameof(Code.Movmskpd_r64_xmm)] },
							invalid,
							invalid,
						},
						new object[] { P_Q, code[nameof(Code.Paveb_mm_mmm64)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { VW_2, code[nameof(Code.Sqrtps_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Sqrtpd_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Sqrtss_xmm_xmmm32)] },
							new object[] { VW_2, code[nameof(Code.Sqrtsd_xmm_xmmm64)] }
						},
						new object[] { P_Q, code[nameof(Code.Paddsiw_mm_mmm64)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { VW_2, code[nameof(Code.Rsqrtps_xmm_xmmm128)] },
							invalid,
							new object[] { VW_2, code[nameof(Code.Rsqrtss_xmm_xmmm32)] },
							invalid,
						},
						new object[] { P_Q, code[nameof(Code.Pmagw_mm_mmm64)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Rcpps_xmm_xmmm128)] },
						invalid,
						new object[] { VW_2, code[nameof(Code.Rcpss_xmm_xmmm32)] },
						invalid,
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { VW_2, code[nameof(Code.Andps_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Andpd_xmm_xmmm128)] },
							invalid,
							invalid,
						},
						new object[] { RM,
							invalid,
							new object[] { P_Q, code[nameof(Code.Pdistib_mm_m64)] }
						}, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { VW_2, code[nameof(Code.Andnps_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Andnpd_xmm_xmmm128)] },
							invalid,
							invalid,
						},
						new object[] { P_Q, code[nameof(Code.Psubsiw_mm_mmm64)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Orps_xmm_xmmm128)] },
						new object[] { VW_2, code[nameof(Code.Orpd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Xorps_xmm_xmmm128)] },
						new object[] { VW_2, code[nameof(Code.Xorpd_xmm_xmmm128)] },
						invalid,
						invalid,
					},

					// 58
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { VW_2, code[nameof(Code.Addps_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Addpd_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Addss_xmm_xmmm32)] },
							new object[] { VW_2, code[nameof(Code.Addsd_xmm_xmmm64)] }
						},
						new object[] { RM,
							invalid,
							new object[] { P_Q, code[nameof(Code.Pmvzb_mm_m64)] }
						}, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { VW_2, code[nameof(Code.Mulps_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Mulpd_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Mulss_xmm_xmmm32)] },
							new object[] { VW_2, code[nameof(Code.Mulsd_xmm_xmmm64)] }
						},
						new object[] { P_Q, code[nameof(Code.Pmulhrw_mm_mmm64)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { VW_2, code[nameof(Code.Cvtps2pd_xmm_xmmm64)] },
							new object[] { VW_2, code[nameof(Code.Cvtpd2ps_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Cvtss2sd_xmm_xmmm32)] },
							new object[] { VW_2, code[nameof(Code.Cvtsd2ss_xmm_xmmm64)] }
						},
						new object[] { RM,
							invalid,
							new object[] { P_Q, code[nameof(Code.Pmvnzb_mm_m64)] }
						}, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { VW_2, code[nameof(Code.Cvtdq2ps_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Cvtps2dq_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Cvttps2dq_xmm_xmmm128)] },
							invalid,
						},
						new object[] { RM,
							invalid,
							new object[] { P_Q, code[nameof(Code.Pmvlzb_mm_m64)] }
						}, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { VW_2, code[nameof(Code.Subps_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Subpd_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Subss_xmm_xmmm32)] },
							new object[] { VW_2, code[nameof(Code.Subsd_xmm_xmmm64)] }
						},
						new object[] { RM,
							invalid,
							new object[] { P_Q, code[nameof(Code.Pmvgezb_mm_m64)] }
						}, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { VW_2, code[nameof(Code.Minps_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Minpd_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Minss_xmm_xmmm32)] },
							new object[] { VW_2, code[nameof(Code.Minsd_xmm_xmmm64)] }
						},
						new object[] { P_Q, code[nameof(Code.Pmulhriw_mm_mmm64)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { VW_2, code[nameof(Code.Divps_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Divpd_xmm_xmmm128)] },
							new object[] { VW_2, code[nameof(Code.Divss_xmm_xmmm32)] },
							new object[] { VW_2, code[nameof(Code.Divsd_xmm_xmmm64)] }
						},
						new object[] { RM,
							invalid,
							new object[] { P_Q, code[nameof(Code.Pmachriw_mm_m64)] }
						}, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { MandatoryPrefix,
						new object[] { VW_2, code[nameof(Code.Maxps_xmm_xmmm128)] },
						new object[] { VW_2, code[nameof(Code.Maxpd_xmm_xmmm128)] },
						new object[] { VW_2, code[nameof(Code.Maxss_xmm_xmmm32)] },
						new object[] { VW_2, code[nameof(Code.Maxsd_xmm_xmmm64)] }
					},

					// 60
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Punpcklbw_mm_mmm32)] },
						new object[] { VW_2, code[nameof(Code.Punpcklbw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Punpcklwd_mm_mmm32)] },
						new object[] { VW_2, code[nameof(Code.Punpcklwd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Punpckldq_mm_mmm32)] },
						new object[] { VW_2, code[nameof(Code.Punpckldq_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Packsswb_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Packsswb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pcmpgtb_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pcmpgtb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pcmpgtw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pcmpgtw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pcmpgtd_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pcmpgtd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Packuswb_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Packuswb_xmm_xmmm128)] },
						invalid,
						invalid,
					},

					// 68
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Punpckhbw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Punpckhbw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Punpckhwd_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Punpckhwd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Punpckhdq_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Punpckhdq_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Packssdw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Packssdw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Punpcklqdq_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Punpckhqdq_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Ev, code[nameof(Code.Movd_mm_rm32)], code[nameof(Code.Movq_mm_rm64)] },
						new object[] { VX_Ev, code[nameof(Code.Movd_xmm_rm32)], code[nameof(Code.Movq_xmm_rm64)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Movq_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Movdqa_xmm_xmmm128)] },
						new object[] { VW_2, code[nameof(Code.Movdqu_xmm_xmmm128)] },
						invalid,
					},

					// 70
					new object[] { MandatoryPrefix,
						new object[] { P_Q_Ib, code[nameof(Code.Pshufw_mm_mmm64_imm8)] },
						new object[] { VWIb_2, code[nameof(Code.Pshufd_xmm_xmmm128_imm8)] },
						new object[] { VWIb_2, code[nameof(Code.Pshufhw_xmm_xmmm128_imm8)] },
						new object[] { VWIb_2, code[nameof(Code.Pshuflw_xmm_xmmm128_imm8)] }
					},
					new object[] { Group, "handlers_Grp_0F71" },
					new object[] { Group, "handlers_Grp_0F72" },
					new object[] { Group, "handlers_Grp_0F73" },
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pcmpeqb_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pcmpeqb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pcmpeqw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pcmpeqw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pcmpeqd_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pcmpeqd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix_NoModRM,
						new object[] { Simple, code[nameof(Code.Emms)] },
						invalid_NoModRM,
						invalid_NoModRM,
						invalid_NoModRM,
					},

					// 78
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { Ev_Gv_32_64, code[nameof(Code.Vmread_rm32_r32)], code[nameof(Code.Vmread_rm64_r64)] },
							new object[] { Group, "handlers_Grp_660F78" },
							invalid,
							new object[] { VRIbIb, code[nameof(Code.Insertq_xmm_xmm_imm8_imm8)] }
						},
						new object[] { M_Sw, code[nameof(Code.Svdc_m80_Sreg)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { Gv_Ev_32_64, code[nameof(Code.Vmwrite_r32_rm32)], code[nameof(Code.Vmwrite_r64_rm64)], true, true },
							new object[] { RM,
								new object[] { VW_3, code[nameof(Code.Extrq_xmm_xmm)], code[nameof(Code.INVALID)] },
								invalid,
							},
							invalid,
							new object[] { RM,
								new object[] { VW_3, code[nameof(Code.Insertq_xmm_xmm)], code[nameof(Code.INVALID)] },
								invalid,
							},
						},
						new object[] { Sw_M, code[nameof(Code.Rsdc_Sreg_m80)] }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						invalid,
						new object[] { Group, "handlers_Grp_0F7A_Cyrix" }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						invalid,
						new object[] { Group, "handlers_Grp_0F7B_Cyrix" }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							invalid,
							new object[] { VW_2, code[nameof(Code.Haddpd_xmm_xmmm128)] },
							invalid,
							new object[] { VW_2, code[nameof(Code.Haddps_xmm_xmmm128)] }
						},
						new object[] { Group, "handlers_Grp_0F7C_Cyrix" }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							invalid,
							new object[] { VW_2, code[nameof(Code.Hsubpd_xmm_xmmm128)] },
							invalid,
							new object[] { VW_2, code[nameof(Code.Hsubps_xmm_xmmm128)] }
						},
						new object[] { Group, "handlers_Grp_0F7D_Cyrix" }, options[nameof(DecoderOptions.Cyrix)]
					},
					new object[] { Options1632_1,
						new object[] { MandatoryPrefix,
							new object[] { Ev_P, code[nameof(Code.Movd_rm32_mm)], code[nameof(Code.Movq_rm64_mm)] },
							new object[] { Ev_VX, code[nameof(Code.Movd_rm32_xmm)], code[nameof(Code.Movq_rm64_xmm)] },
							new object[] { VW_2, code[nameof(Code.Movq_xmm_xmmm64)] },
							invalid,
						},
						new object[] { Simple, code[nameof(Code.Smint_0F7E)] }, options[nameof(DecoderOptions.Cyrix_SMINT_0F7E)]
					},
					new object[] { MandatoryPrefix,
						new object[] { Q_P, code[nameof(Code.Movq_mmm64_mm)] },
						new object[] { WV, code[nameof(Code.Movdqa_xmmm128_xmm)] },
						new object[] { WV, code[nameof(Code.Movdqu_xmmm128_xmm)] },
						invalid,
					},

					// 80
					new object[] { Jz, code[nameof(Code.Jo_rel16)], code[nameof(Code.Jo_rel32_32)], code[nameof(Code.Jo_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Jno_rel16)], code[nameof(Code.Jno_rel32_32)], code[nameof(Code.Jno_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Jb_rel16)], code[nameof(Code.Jb_rel32_32)], code[nameof(Code.Jb_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Jae_rel16)], code[nameof(Code.Jae_rel32_32)], code[nameof(Code.Jae_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Je_rel16)], code[nameof(Code.Je_rel32_32)], code[nameof(Code.Je_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Jne_rel16)], code[nameof(Code.Jne_rel32_32)], code[nameof(Code.Jne_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Jbe_rel16)], code[nameof(Code.Jbe_rel32_32)], code[nameof(Code.Jbe_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Ja_rel16)], code[nameof(Code.Ja_rel32_32)], code[nameof(Code.Ja_rel32_64)] },

					// 88
					new object[] { Jz, code[nameof(Code.Js_rel16)], code[nameof(Code.Js_rel32_32)], code[nameof(Code.Js_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Jns_rel16)], code[nameof(Code.Jns_rel32_32)], code[nameof(Code.Jns_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Jp_rel16)], code[nameof(Code.Jp_rel32_32)], code[nameof(Code.Jp_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Jnp_rel16)], code[nameof(Code.Jnp_rel32_32)], code[nameof(Code.Jnp_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Jl_rel16)], code[nameof(Code.Jl_rel32_32)], code[nameof(Code.Jl_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Jge_rel16)], code[nameof(Code.Jge_rel32_32)], code[nameof(Code.Jge_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Jle_rel16)], code[nameof(Code.Jle_rel32_32)], code[nameof(Code.Jle_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Jg_rel16)], code[nameof(Code.Jg_rel32_32)], code[nameof(Code.Jg_rel32_64)] },

					// 90
					new object[] { Eb_1, code[nameof(Code.Seto_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Setno_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Setb_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Setae_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Sete_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Setne_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Setbe_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Seta_rm8)] },

					// 98
					new object[] { Eb_1, code[nameof(Code.Sets_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Setns_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Setp_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Setnp_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Setl_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Setge_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Setle_rm8)] },
					new object[] { Eb_1, code[nameof(Code.Setg_rm8)] },

					// A0
					new object[] { PushOpSizeReg_4a, code[nameof(Code.Pushw_FS)], code[nameof(Code.Pushd_FS)], code[nameof(Code.Pushq_FS)], fs },
					new object[] { PushOpSizeReg_4a, code[nameof(Code.Popw_FS)], code[nameof(Code.Popd_FS)], code[nameof(Code.Popq_FS)], fs },
					new object[] { Simple, code[nameof(Code.Cpuid)] },
					new object[] { Ev_Gv_3a, code[nameof(Code.Bt_rm16_r16)], code[nameof(Code.Bt_rm32_r32)], code[nameof(Code.Bt_rm64_r64)] },
					new object[] { Ev_Gv_Ib, code[nameof(Code.Shld_rm16_r16_imm8)], code[nameof(Code.Shld_rm32_r32_imm8)], code[nameof(Code.Shld_rm64_r64_imm8)] },
					new object[] { Ev_Gv_CL, code[nameof(Code.Shld_rm16_r16_CL)], code[nameof(Code.Shld_rm32_r32_CL)], code[nameof(Code.Shld_rm64_r64_CL)] },
					new object[] { Bitness,
						new object[] { Options5,
							new object[] { Group, "handlers_Grp_0FA6" },
							new object[] { Gv_Ev_3b, code[nameof(Code.Xbts_r16_rm16)], code[nameof(Code.Xbts_r32_rm32)] }, options[nameof(DecoderOptions.Xbts)],
							new object[] { Eb_Gb_1, code[nameof(Code.Cmpxchg486_rm8_r8)] }, options[nameof(DecoderOptions.Cmpxchg486A)]
						},
						new object[] { Group, "handlers_Grp_0FA6" },
					},
					new object[] { Bitness,
						new object[] { Options5,
							new object[] { Group, "handlers_Grp_0FA7" },
							new object[] { Ev_Gv_3b, code[nameof(Code.Ibts_rm16_r16)], code[nameof(Code.Ibts_rm32_r32)] }, options[nameof(DecoderOptions.Xbts)],
							new object[] { Ev_Gv_3b, code[nameof(Code.Cmpxchg486_rm16_r16)], code[nameof(Code.Cmpxchg486_rm32_r32)] }, options[nameof(DecoderOptions.Cmpxchg486A)]
						},
						new object[] { Group, "handlers_Grp_0FA7" },
					},

					// A8
					new object[] { PushOpSizeReg_4a, code[nameof(Code.Pushw_GS)], code[nameof(Code.Pushd_GS)], code[nameof(Code.Pushq_GS)], gs },
					new object[] { PushOpSizeReg_4a, code[nameof(Code.Popw_GS)], code[nameof(Code.Popd_GS)], code[nameof(Code.Popq_GS)], gs },
					new object[] { Simple, code[nameof(Code.Rsm)] },
					new object[] { Ev_Gv_4, code[nameof(Code.Bts_rm16_r16)], code[nameof(Code.Bts_rm32_r32)], code[nameof(Code.Bts_rm64_r64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Gv_Ib, code[nameof(Code.Shrd_rm16_r16_imm8)], code[nameof(Code.Shrd_rm32_r32_imm8)], code[nameof(Code.Shrd_rm64_r64_imm8)] },
					new object[] { Ev_Gv_CL, code[nameof(Code.Shrd_rm16_r16_CL)], code[nameof(Code.Shrd_rm32_r32_CL)], code[nameof(Code.Shrd_rm64_r64_CL)] },
					new object[] { Group8x64, "handlers_Grp_0FAE_lo", "handlers_Grp_0FAE_hi" },
					new object[] { Gv_Ev_3a, code[nameof(Code.Imul_r16_rm16)], code[nameof(Code.Imul_r32_rm32)], code[nameof(Code.Imul_r64_rm64)] },

					// B0
					new object[] { Eb_Gb_2, code[nameof(Code.Cmpxchg_rm8_r8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Gv_4, code[nameof(Code.Cmpxchg_rm16_r16)], code[nameof(Code.Cmpxchg_rm32_r32)], code[nameof(Code.Cmpxchg_rm64_r64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Gv_Mp_3, code[nameof(Code.Lss_r16_m1616)], code[nameof(Code.Lss_r32_m1632)], code[nameof(Code.Lss_r64_m1664)] },
					new object[] { Ev_Gv_4, code[nameof(Code.Btr_rm16_r16)], code[nameof(Code.Btr_rm32_r32)], code[nameof(Code.Btr_rm64_r64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Gv_Mp_3, code[nameof(Code.Lfs_r16_m1616)], code[nameof(Code.Lfs_r32_m1632)], code[nameof(Code.Lfs_r64_m1664)] },
					new object[] { Gv_Mp_3, code[nameof(Code.Lgs_r16_m1616)], code[nameof(Code.Lgs_r32_m1632)], code[nameof(Code.Lgs_r64_m1664)] },
					new object[] { Gv_Eb, code[nameof(Code.Movzx_r16_rm8)], code[nameof(Code.Movzx_r32_rm8)], code[nameof(Code.Movzx_r64_rm8)] },
					new object[] { Gv_Ew, code[nameof(Code.Movzx_r16_rm16)], code[nameof(Code.Movzx_r32_rm16)], code[nameof(Code.Movzx_r64_rm16)] },

					// B8
					new object[] { Options3,
						new object[] { MandatoryPrefix4,
							invalid,
							invalid,
							new object[] { Gv_Ev_3a, code[nameof(Code.Popcnt_r16_rm16)], code[nameof(Code.Popcnt_r32_rm32)], code[nameof(Code.Popcnt_r64_rm64)] },
							invalid,
							0x1C,
						},
						new object[] { Bitness,
							new object[] { Jdisp, code[nameof(Code.Jmpe_disp16)], code[nameof(Code.Jmpe_disp32)] },
							new object[] { MandatoryPrefix4,
								invalid,
								invalid,
								new object[] { Gv_Ev_3a, code[nameof(Code.Popcnt_r16_rm16)], code[nameof(Code.Popcnt_r32_rm32)], code[nameof(Code.Popcnt_r64_rm64)] },
								invalid,
								0x1C,
							},
						}, options[nameof(DecoderOptions.Jmpe)]
					},
					new object[] { Gv_Ev_3a, code[nameof(Code.Ud1_r16_rm16)], code[nameof(Code.Ud1_r32_rm32)], code[nameof(Code.Ud1_r64_rm64)] },
					new object[] { Group, "handlers_Grp_0FBA" },
					new object[] { Ev_Gv_4, code[nameof(Code.Btc_rm16_r16)], code[nameof(Code.Btc_rm32_r32)], code[nameof(Code.Btc_rm64_r64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Options3,
						new object[] { MandatoryPrefix4,
							new object[] { Gv_Ev_3a, code[nameof(Code.Bsf_r16_rm16)], code[nameof(Code.Bsf_r32_rm32)], code[nameof(Code.Bsf_r64_rm64)] },
							new object[] { Gv_Ev_3a, code[nameof(Code.Bsf_r16_rm16)], code[nameof(Code.Bsf_r32_rm32)], code[nameof(Code.Bsf_r64_rm64)] },
							new object[] { Gv_Ev_3a, code[nameof(Code.Tzcnt_r16_rm16)], code[nameof(Code.Tzcnt_r32_rm32)], code[nameof(Code.Tzcnt_r64_rm64)] },
							new object[] { Gv_Ev_3a, code[nameof(Code.Bsf_r16_rm16)], code[nameof(Code.Bsf_r32_rm32)], code[nameof(Code.Bsf_r64_rm64)] },
							0x14,
						},
						new object[] { Gv_Ev_3a, code[nameof(Code.Bsf_r16_rm16)], code[nameof(Code.Bsf_r32_rm32)], code[nameof(Code.Bsf_r64_rm64)] }, options[nameof(DecoderOptions.NoMPFX_0FBC)]
					},
					new object[] { Options3,
						new object[] { MandatoryPrefix4,
							new object[] { Gv_Ev_3a, code[nameof(Code.Bsr_r16_rm16)], code[nameof(Code.Bsr_r32_rm32)], code[nameof(Code.Bsr_r64_rm64)] },
							new object[] { Gv_Ev_3a, code[nameof(Code.Bsr_r16_rm16)], code[nameof(Code.Bsr_r32_rm32)], code[nameof(Code.Bsr_r64_rm64)] },
							new object[] { Gv_Ev_3a, code[nameof(Code.Lzcnt_r16_rm16)], code[nameof(Code.Lzcnt_r32_rm32)], code[nameof(Code.Lzcnt_r64_rm64)] },
							new object[] { Gv_Ev_3a, code[nameof(Code.Bsr_r16_rm16)], code[nameof(Code.Bsr_r32_rm32)], code[nameof(Code.Bsr_r64_rm64)] },
							0x14,
						},
						new object[] { Gv_Ev_3a, code[nameof(Code.Bsr_r16_rm16)], code[nameof(Code.Bsr_r32_rm32)], code[nameof(Code.Bsr_r64_rm64)] }, options[nameof(DecoderOptions.NoMPFX_0FBD)]
					},
					new object[] { Gv_Eb, code[nameof(Code.Movsx_r16_rm8)], code[nameof(Code.Movsx_r32_rm8)], code[nameof(Code.Movsx_r64_rm8)] },
					new object[] { Gv_Ew, code[nameof(Code.Movsx_r16_rm16)], code[nameof(Code.Movsx_r32_rm16)], code[nameof(Code.Movsx_r64_rm16)] },

					// C0
					new object[] { Eb_Gb_2, code[nameof(Code.Xadd_rm8_r8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Gv_4, code[nameof(Code.Xadd_rm16_r16)], code[nameof(Code.Xadd_rm32_r32)], code[nameof(Code.Xadd_rm64_r64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { MandatoryPrefix,
						new object[] { VWIb_2, code[nameof(Code.Cmpps_xmm_xmmm128_imm8)] },
						new object[] { VWIb_2, code[nameof(Code.Cmppd_xmm_xmmm128_imm8)] },
						new object[] { VWIb_2, code[nameof(Code.Cmpss_xmm_xmmm32_imm8)] },
						new object[] { VWIb_2, code[nameof(Code.Cmpsd_xmm_xmmm64_imm8)] }
					},
					new object[] { MandatoryPrefix,
						new object[] { Mv_Gv_REXW, code[nameof(Code.Movnti_m32_r32)], code[nameof(Code.Movnti_m64_r64)] },
						invalid,
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Ev_Ib, code[nameof(Code.Pinsrw_mm_r32m16_imm8)], code[nameof(Code.Pinsrw_mm_r64m16_imm8)] },
						new object[] { VX_E_Ib, code[nameof(Code.Pinsrw_xmm_r32m16_imm8)], code[nameof(Code.Pinsrw_xmm_r64m16_imm8)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { Gv_N_Ib_REX, code[nameof(Code.Pextrw_r32_mm_imm8)], code[nameof(Code.Pextrw_r64_mm_imm8)] },
						new object[] { RM,
							new object[] { Gv_Ev_Ib_REX, code[nameof(Code.Pextrw_r32_xmm_imm8)], code[nameof(Code.Pextrw_r64_xmm_imm8)] },
							invalid,
						},
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { VWIb_2, code[nameof(Code.Shufps_xmm_xmmm128_imm8)] },
						new object[] { VWIb_2, code[nameof(Code.Shufpd_xmm_xmmm128_imm8)] },
						invalid,
						invalid,
					},
					new object[] { Group, "handlers_Grp_0FC7" },

					// C8
					new object[] { SimpleReg, code[nameof(Code.Bswap_r16)], 0 },
					new object[] { SimpleReg, code[nameof(Code.Bswap_r16)], 1 },
					new object[] { SimpleReg, code[nameof(Code.Bswap_r16)], 2 },
					new object[] { SimpleReg, code[nameof(Code.Bswap_r16)], 3 },
					new object[] { SimpleReg, code[nameof(Code.Bswap_r16)], 4 },
					new object[] { SimpleReg, code[nameof(Code.Bswap_r16)], 5 },
					new object[] { SimpleReg, code[nameof(Code.Bswap_r16)], 6 },
					new object[] { SimpleReg, code[nameof(Code.Bswap_r16)], 7 },

					// D0
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Addsubpd_xmm_xmmm128)] },
						invalid,
						new object[] { VW_2, code[nameof(Code.Addsubps_xmm_xmmm128)] }
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psrlw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psrlw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psrld_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psrld_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psrlq_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psrlq_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Paddq_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Paddq_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pmullw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pmullw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { WV, code[nameof(Code.Movq_xmmm64_xmm)] },
						new object[] { VN, code[nameof(Code.Movq2dq_xmm_mm)] },
						new object[] { P_R, code[nameof(Code.Movdq2q_mm_xmm)] }
					},
					new object[] { MandatoryPrefix,
						new object[] { Gv_N, code[nameof(Code.Pmovmskb_r32_mm)], code[nameof(Code.Pmovmskb_r64_mm)] },
						new object[] { Gv_RX, code[nameof(Code.Pmovmskb_r32_xmm)], code[nameof(Code.Pmovmskb_r64_xmm)] },
						invalid,
						invalid,
					},

					// D8
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psubusb_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psubusb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psubusw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psubusw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pminub_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pminub_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pand_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pand_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Paddusb_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Paddusb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Paddusw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Paddusw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pmaxub_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pmaxub_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pandn_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pandn_xmm_xmmm128)] },
						invalid,
						invalid,
					},

					// E0
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pavgb_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pavgb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psraw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psraw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psrad_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psrad_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pavgw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pavgw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pmulhuw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pmulhuw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pmulhw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pmulhw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						invalid,
						new object[] { VW_2, code[nameof(Code.Cvttpd2dq_xmm_xmmm128)] },
						new object[] { VW_2, code[nameof(Code.Cvtdq2pd_xmm_xmmm64)] },
						new object[] { VW_2, code[nameof(Code.Cvtpd2dq_xmm_xmmm128)] }
					},
					new object[] { MandatoryPrefix,
						new object[] { MP, code[nameof(Code.Movntq_m64_mm)] },
						new object[] { MV, code[nameof(Code.Movntdq_m128_xmm)] },
						invalid,
						invalid,
					},

					// E8
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psubsb_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psubsb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psubsw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psubsw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pminsw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pminsw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Por_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Por_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Paddsb_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Paddsb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Paddsw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Paddsw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pmaxsw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pmaxsw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pxor_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pxor_xmm_xmmm128)] },
						invalid,
						invalid,
					},

					// F0
					new object[] { MandatoryPrefix,
						invalid,
						invalid,
						invalid,
						new object[] { VM, code[nameof(Code.Lddqu_xmm_m128)] }
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psllw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psllw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pslld_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pslld_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psllq_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psllq_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pmuludq_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pmuludq_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Pmaddwd_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Pmaddwd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psadbw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psadbw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { rDI_P_N, code[nameof(Code.Maskmovq_rDI_mm_mm)] },
						new object[] { rDI_VX_RX, code[nameof(Code.Maskmovdqu_rDI_xmm_xmm)] },
						invalid,
						invalid,
					},

					// F8
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psubb_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psubb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psubw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psubw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psubd_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psubd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Psubq_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Psubq_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Paddb_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Paddb_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Paddw_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Paddw_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { MandatoryPrefix,
						new object[] { P_Q, code[nameof(Code.Paddd_mm_mmm64)] },
						new object[] { VW_2, code[nameof(Code.Paddd_xmm_xmmm128)] },
						invalid,
						invalid,
					},
					new object[] { Options3,
						new object[] { Gv_Ev_3a, code[nameof(Code.Ud0_r16_rm16)], code[nameof(Code.Ud0_r32_rm32)], code[nameof(Code.Ud0_r64_rm64)] },
						new object[] { Simple, code[nameof(Code.Ud0)] }, options[nameof(DecoderOptions.AMD)]
					},
				}),

				(Handlers_MAP0,
				new object[0x100] {
					// 00
					new object[] { Eb_Gb_2, code[nameof(Code.Add_rm8_r8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Gv_4, code[nameof(Code.Add_rm16_r16)], code[nameof(Code.Add_rm32_r32)], code[nameof(Code.Add_rm64_r64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Gb_Eb, code[nameof(Code.Add_r8_rm8)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Add_r16_rm16)], code[nameof(Code.Add_r32_rm32)], code[nameof(Code.Add_r64_rm64)] },
					new object[] { RegIb, code[nameof(Code.Add_AL_imm8)], al },
					new object[] { Reg_Iz, code[nameof(Code.Add_AX_imm16)], code[nameof(Code.Add_EAX_imm32)], code[nameof(Code.Add_RAX_imm32)] },
					new object[] { Bitness,
						new object[] { PushOpSizeReg_4b, code[nameof(Code.Pushw_ES)], code[nameof(Code.Pushd_ES)], es },
						invalid,
					},
					new object[] { Bitness,
						new object[] { PushOpSizeReg_4b, code[nameof(Code.Popw_ES)], code[nameof(Code.Popd_ES)], es },
						invalid,
					},

					// 08
					new object[] { Eb_Gb_2, code[nameof(Code.Or_rm8_r8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Gv_4, code[nameof(Code.Or_rm16_r16)], code[nameof(Code.Or_rm32_r32)], code[nameof(Code.Or_rm64_r64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Gb_Eb, code[nameof(Code.Or_r8_rm8)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Or_r16_rm16)], code[nameof(Code.Or_r32_rm32)], code[nameof(Code.Or_r64_rm64)] },
					new object[] { RegIb, code[nameof(Code.Or_AL_imm8)], al },
					new object[] { Reg_Iz, code[nameof(Code.Or_AX_imm16)], code[nameof(Code.Or_EAX_imm32)], code[nameof(Code.Or_RAX_imm32)] },
					new object[] { Bitness,
						new object[] { PushOpSizeReg_4b, code[nameof(Code.Pushw_CS)], code[nameof(Code.Pushd_CS)], cs },
						invalid,
					},
					new object[] { AnotherTable, "Handlers_0F" },

					// 10
					new object[] { Eb_Gb_2, code[nameof(Code.Adc_rm8_r8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Gv_4, code[nameof(Code.Adc_rm16_r16)], code[nameof(Code.Adc_rm32_r32)], code[nameof(Code.Adc_rm64_r64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Gb_Eb, code[nameof(Code.Adc_r8_rm8)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Adc_r16_rm16)], code[nameof(Code.Adc_r32_rm32)], code[nameof(Code.Adc_r64_rm64)] },
					new object[] { RegIb, code[nameof(Code.Adc_AL_imm8)], al },
					new object[] { Reg_Iz, code[nameof(Code.Adc_AX_imm16)], code[nameof(Code.Adc_EAX_imm32)], code[nameof(Code.Adc_RAX_imm32)] },
					new object[] { Bitness,
						new object[] { PushOpSizeReg_4b, code[nameof(Code.Pushw_SS)], code[nameof(Code.Pushd_SS)], ss },
						invalid,
					},
					new object[] { Bitness,
						new object[] { PushOpSizeReg_4b, code[nameof(Code.Popw_SS)], code[nameof(Code.Popd_SS)], ss },
						invalid,
					},

					// 18
					new object[] { Eb_Gb_2, code[nameof(Code.Sbb_rm8_r8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Gv_4, code[nameof(Code.Sbb_rm16_r16)], code[nameof(Code.Sbb_rm32_r32)], code[nameof(Code.Sbb_rm64_r64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Gb_Eb, code[nameof(Code.Sbb_r8_rm8)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Sbb_r16_rm16)], code[nameof(Code.Sbb_r32_rm32)], code[nameof(Code.Sbb_r64_rm64)] },
					new object[] { RegIb, code[nameof(Code.Sbb_AL_imm8)], al },
					new object[] { Reg_Iz, code[nameof(Code.Sbb_AX_imm16)], code[nameof(Code.Sbb_EAX_imm32)], code[nameof(Code.Sbb_RAX_imm32)] },
					new object[] { Bitness,
						new object[] { PushOpSizeReg_4b, code[nameof(Code.Pushw_DS)], code[nameof(Code.Pushd_DS)], ds },
						invalid,
					},
					new object[] { Bitness,
						new object[] { PushOpSizeReg_4b, code[nameof(Code.Popw_DS)], code[nameof(Code.Popd_DS)], ds },
						invalid,
					},

					// 20
					new object[] { Eb_Gb_2, code[nameof(Code.And_rm8_r8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Gv_4, code[nameof(Code.And_rm16_r16)], code[nameof(Code.And_rm32_r32)], code[nameof(Code.And_rm64_r64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Gb_Eb, code[nameof(Code.And_r8_rm8)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.And_r16_rm16)], code[nameof(Code.And_r32_rm32)], code[nameof(Code.And_r64_rm64)] },
					new object[] { RegIb, code[nameof(Code.And_AL_imm8)], al },
					new object[] { Reg_Iz, code[nameof(Code.And_AX_imm16)], code[nameof(Code.And_EAX_imm32)], code[nameof(Code.And_RAX_imm32)] },
					new object[] { PrefixEsCsSsDs, es },
					new object[] { Bitness,
						new object[] { Simple, code[nameof(Code.Daa)] },
						invalid,
					},

					// 28
					new object[] { Eb_Gb_2, code[nameof(Code.Sub_rm8_r8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Gv_4, code[nameof(Code.Sub_rm16_r16)], code[nameof(Code.Sub_rm32_r32)], code[nameof(Code.Sub_rm64_r64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Gb_Eb, code[nameof(Code.Sub_r8_rm8)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Sub_r16_rm16)], code[nameof(Code.Sub_r32_rm32)], code[nameof(Code.Sub_r64_rm64)] },
					new object[] { RegIb, code[nameof(Code.Sub_AL_imm8)], al },
					new object[] { Reg_Iz, code[nameof(Code.Sub_AX_imm16)], code[nameof(Code.Sub_EAX_imm32)], code[nameof(Code.Sub_RAX_imm32)] },
					new object[] { PrefixEsCsSsDs, cs },
					new object[] { Bitness,
						new object[] { Simple, code[nameof(Code.Das)] },
						invalid,
					},

					// 30
					new object[] { Eb_Gb_2, code[nameof(Code.Xor_rm8_r8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Gv_4, code[nameof(Code.Xor_rm16_r16)], code[nameof(Code.Xor_rm32_r32)], code[nameof(Code.Xor_rm64_r64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.Lock)) },
					new object[] { Gb_Eb, code[nameof(Code.Xor_r8_rm8)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Xor_r16_rm16)], code[nameof(Code.Xor_r32_rm32)], code[nameof(Code.Xor_r64_rm64)] },
					new object[] { RegIb, code[nameof(Code.Xor_AL_imm8)], al },
					new object[] { Reg_Iz, code[nameof(Code.Xor_AX_imm16)], code[nameof(Code.Xor_EAX_imm32)], code[nameof(Code.Xor_RAX_imm32)] },
					new object[] { PrefixEsCsSsDs, ss },
					new object[] { Bitness,
						new object[] { Simple, code[nameof(Code.Aaa)] },
						invalid,
					},

					// 38
					new object[] { Eb_Gb_1, code[nameof(Code.Cmp_rm8_r8)] },
					new object[] { Ev_Gv_3a, code[nameof(Code.Cmp_rm16_r16)], code[nameof(Code.Cmp_rm32_r32)], code[nameof(Code.Cmp_rm64_r64)] },
					new object[] { Gb_Eb, code[nameof(Code.Cmp_r8_rm8)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Cmp_r16_rm16)], code[nameof(Code.Cmp_r32_rm32)], code[nameof(Code.Cmp_r64_rm64)] },
					new object[] { RegIb, code[nameof(Code.Cmp_AL_imm8)], al },
					new object[] { Reg_Iz, code[nameof(Code.Cmp_AX_imm16)], code[nameof(Code.Cmp_EAX_imm32)], code[nameof(Code.Cmp_RAX_imm32)] },
					new object[] { PrefixEsCsSsDs, ds },
					new object[] { Bitness,
						new object[] { Simple, code[nameof(Code.Aas)] },
						invalid,
					},

					// 40
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Inc_r16)], 0 },
						0,
					},
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Inc_r16)], 1 },
						1,
					},
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Inc_r16)], 2 },
						2,
					},
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Inc_r16)], 3 },
						3,
					},
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Inc_r16)], 4 },
						4,
					},
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Inc_r16)], 5 },
						5,
					},
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Inc_r16)], 6 },
						6,
					},
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Inc_r16)], 7 },
						7,
					},

					// 48
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Dec_r16)], 0 },
						8,
					},
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Dec_r16)], 1 },
						9,
					},
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Dec_r16)], 2 },
						0xA,
					},
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Dec_r16)], 3 },
						0xB,
					},
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Dec_r16)], 4 },
						0xC,
					},
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Dec_r16)], 5 },
						0xD,
					},
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Dec_r16)], 6 },
						0xE,
					},
					new object[] { PrefixREX,
						new object[] { SimpleReg, code[nameof(Code.Dec_r16)], 7 },
						0xF,
					},

					// 50
					new object[] { PushSimpleReg, 0, code[nameof(Code.Push_r16)], code[nameof(Code.Push_r32)], code[nameof(Code.Push_r64)] },
					new object[] { PushSimpleReg, 1, code[nameof(Code.Push_r16)], code[nameof(Code.Push_r32)], code[nameof(Code.Push_r64)] },
					new object[] { PushSimpleReg, 2, code[nameof(Code.Push_r16)], code[nameof(Code.Push_r32)], code[nameof(Code.Push_r64)] },
					new object[] { PushSimpleReg, 3, code[nameof(Code.Push_r16)], code[nameof(Code.Push_r32)], code[nameof(Code.Push_r64)] },
					new object[] { PushSimpleReg, 4, code[nameof(Code.Push_r16)], code[nameof(Code.Push_r32)], code[nameof(Code.Push_r64)] },
					new object[] { PushSimpleReg, 5, code[nameof(Code.Push_r16)], code[nameof(Code.Push_r32)], code[nameof(Code.Push_r64)] },
					new object[] { PushSimpleReg, 6, code[nameof(Code.Push_r16)], code[nameof(Code.Push_r32)], code[nameof(Code.Push_r64)] },
					new object[] { PushSimpleReg, 7, code[nameof(Code.Push_r16)], code[nameof(Code.Push_r32)], code[nameof(Code.Push_r64)] },

					// 58
					new object[] { PushSimpleReg, 0, code[nameof(Code.Pop_r16)], code[nameof(Code.Pop_r32)], code[nameof(Code.Pop_r64)] },
					new object[] { PushSimpleReg, 1, code[nameof(Code.Pop_r16)], code[nameof(Code.Pop_r32)], code[nameof(Code.Pop_r64)] },
					new object[] { PushSimpleReg, 2, code[nameof(Code.Pop_r16)], code[nameof(Code.Pop_r32)], code[nameof(Code.Pop_r64)] },
					new object[] { PushSimpleReg, 3, code[nameof(Code.Pop_r16)], code[nameof(Code.Pop_r32)], code[nameof(Code.Pop_r64)] },
					new object[] { PushSimpleReg, 4, code[nameof(Code.Pop_r16)], code[nameof(Code.Pop_r32)], code[nameof(Code.Pop_r64)] },
					new object[] { PushSimpleReg, 5, code[nameof(Code.Pop_r16)], code[nameof(Code.Pop_r32)], code[nameof(Code.Pop_r64)] },
					new object[] { PushSimpleReg, 6, code[nameof(Code.Pop_r16)], code[nameof(Code.Pop_r32)], code[nameof(Code.Pop_r64)] },
					new object[] { PushSimpleReg, 7, code[nameof(Code.Pop_r16)], code[nameof(Code.Pop_r32)], code[nameof(Code.Pop_r64)] },

					// 60
					new object[] { Bitness,
						new object[] { Simple2_3b, code[nameof(Code.Pushaw)], code[nameof(Code.Pushad)], code[nameof(Code.Pushad)] },
						invalid,
					},
					new object[] { Bitness,
						new object[] { Simple2_3b, code[nameof(Code.Popaw)], code[nameof(Code.Popad)], code[nameof(Code.Popad)] },
						invalid,
					},
					new object[] { EVEX, new object[] { Gv_Ma, code[nameof(Code.Bound_r16_m1616)], code[nameof(Code.Bound_r32_m3232)] } },
					new object[] { Bitness,
						new object[] { RvMw_Gw, code[nameof(Code.Arpl_rm16_r16)], code[nameof(Code.Arpl_r32m16_r32)] },
						new object[] { Gv_Ev2, code[nameof(Code.Movsxd_r16_rm16)], code[nameof(Code.Movsxd_r32_rm32)], code[nameof(Code.Movsxd_r64_rm32)] },
					},
					new object[] { PrefixFsGs, fs },
					new object[] { PrefixFsGs, gs },
					new object[] { Prefix66 },
					new object[] { Prefix67 },

					// 68
					new object[] { PushIz, code[nameof(Code.Push_imm16)], code[nameof(Code.Pushd_imm32)], code[nameof(Code.Pushq_imm32)] },
					new object[] { Gv_Ev_Iz, code[nameof(Code.Imul_r16_rm16_imm16)], code[nameof(Code.Imul_r32_rm32_imm32)], code[nameof(Code.Imul_r64_rm64_imm32)] },
					new object[] { PushIb2, code[nameof(Code.Pushw_imm8)], code[nameof(Code.Pushd_imm8)], code[nameof(Code.Pushq_imm8)] },
					new object[] { Gv_Ev_Ib, code[nameof(Code.Imul_r16_rm16_imm8)], code[nameof(Code.Imul_r32_rm32_imm8)], code[nameof(Code.Imul_r64_rm64_imm8)] },
					new object[] { Yb_Reg, code[nameof(Code.Insb_m8_DX)], dx },
					new object[] { Yv_Reg2, code[nameof(Code.Insw_m16_DX)], code[nameof(Code.Insd_m32_DX)] },
					new object[] { Reg_Xb, code[nameof(Code.Outsb_DX_m8)], dx },
					new object[] { Reg_Xv2, code[nameof(Code.Outsw_DX_m16)], code[nameof(Code.Outsd_DX_m32)] },

					// 70
					new object[] { Jb, code[nameof(Code.Jo_rel8_16)], code[nameof(Code.Jo_rel8_32)], code[nameof(Code.Jo_rel8_64)] },
					new object[] { Jb, code[nameof(Code.Jno_rel8_16)], code[nameof(Code.Jno_rel8_32)], code[nameof(Code.Jno_rel8_64)] },
					new object[] { Jb, code[nameof(Code.Jb_rel8_16)], code[nameof(Code.Jb_rel8_32)], code[nameof(Code.Jb_rel8_64)] },
					new object[] { Jb, code[nameof(Code.Jae_rel8_16)], code[nameof(Code.Jae_rel8_32)], code[nameof(Code.Jae_rel8_64)] },
					new object[] { Jb, code[nameof(Code.Je_rel8_16)], code[nameof(Code.Je_rel8_32)], code[nameof(Code.Je_rel8_64)] },
					new object[] { Jb, code[nameof(Code.Jne_rel8_16)], code[nameof(Code.Jne_rel8_32)], code[nameof(Code.Jne_rel8_64)] },
					new object[] { Jb, code[nameof(Code.Jbe_rel8_16)], code[nameof(Code.Jbe_rel8_32)], code[nameof(Code.Jbe_rel8_64)] },
					new object[] { Jb, code[nameof(Code.Ja_rel8_16)], code[nameof(Code.Ja_rel8_32)], code[nameof(Code.Ja_rel8_64)] },

					// 78
					new object[] { Jb, code[nameof(Code.Js_rel8_16)], code[nameof(Code.Js_rel8_32)], code[nameof(Code.Js_rel8_64)] },
					new object[] { Jb, code[nameof(Code.Jns_rel8_16)], code[nameof(Code.Jns_rel8_32)], code[nameof(Code.Jns_rel8_64)] },
					new object[] { Jb, code[nameof(Code.Jp_rel8_16)], code[nameof(Code.Jp_rel8_32)], code[nameof(Code.Jp_rel8_64)] },
					new object[] { Jb, code[nameof(Code.Jnp_rel8_16)], code[nameof(Code.Jnp_rel8_32)], code[nameof(Code.Jnp_rel8_64)] },
					new object[] { Jb, code[nameof(Code.Jl_rel8_16)], code[nameof(Code.Jl_rel8_32)], code[nameof(Code.Jl_rel8_64)] },
					new object[] { Jb, code[nameof(Code.Jge_rel8_16)], code[nameof(Code.Jge_rel8_32)], code[nameof(Code.Jge_rel8_64)] },
					new object[] { Jb, code[nameof(Code.Jle_rel8_16)], code[nameof(Code.Jle_rel8_32)], code[nameof(Code.Jle_rel8_64)] },
					new object[] { Jb, code[nameof(Code.Jg_rel8_16)], code[nameof(Code.Jg_rel8_32)], code[nameof(Code.Jg_rel8_64)] },

					// 80
					new object[] { Group, "handlers_Grp_80" },
					new object[] { Group, "handlers_Grp_81" },
					new object[] { Bitness,
						new object[] { Group, "handlers_Grp_82" },
						invalid,
					},
					new object[] { Group, "handlers_Grp_83" },
					new object[] { Eb_Gb_1, code[nameof(Code.Test_rm8_r8)] },
					new object[] { Ev_Gv_3a, code[nameof(Code.Test_rm16_r16)], code[nameof(Code.Test_rm32_r32)], code[nameof(Code.Test_rm64_r64)] },
					new object[] { Eb_Gb_2, code[nameof(Code.Xchg_rm8_r8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.XacquireXreleaseNoLock), nameof(HandlerFlags.Lock)) },
					new object[] { Ev_Gv_4, code[nameof(Code.Xchg_rm16_r16)], code[nameof(Code.Xchg_rm32_r32)], code[nameof(Code.Xchg_rm64_r64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xacquire), nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.XacquireXreleaseNoLock), nameof(HandlerFlags.Lock)) },

					// 88
					new object[] { Eb_Gb_2, code[nameof(Code.Mov_rm8_r8)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.XacquireXreleaseNoLock)) },
					new object[] { Ev_Gv_4, code[nameof(Code.Mov_rm16_r16)], code[nameof(Code.Mov_rm32_r32)], code[nameof(Code.Mov_rm64_r64)], new OrEnumValue(handlerFlags, nameof(HandlerFlags.Xrelease), nameof(HandlerFlags.XacquireXreleaseNoLock)) },
					new object[] { Gb_Eb, code[nameof(Code.Mov_r8_rm8)] },
					new object[] { Gv_Ev_3a, code[nameof(Code.Mov_r16_rm16)], code[nameof(Code.Mov_r32_rm32)], code[nameof(Code.Mov_r64_rm64)] },
					new object[] { Ev_Sw, code[nameof(Code.Mov_rm16_Sreg)], code[nameof(Code.Mov_r32m16_Sreg)], code[nameof(Code.Mov_r64m16_Sreg)] },
					new object[] { Gv_M, code[nameof(Code.Lea_r16_m)], code[nameof(Code.Lea_r32_m)], code[nameof(Code.Lea_r64_m)] },
					new object[] { Sw_Ev, code[nameof(Code.Mov_Sreg_rm16)], code[nameof(Code.Mov_Sreg_r32m16)], code[nameof(Code.Mov_Sreg_r64m16)] },
					new object[] { XOP, new object[] { Group, "handlers_Grp_8F" } },

					// 90
					new object[] { Xchg_Reg_rAX, 0 },
					new object[] { Xchg_Reg_rAX, 1 },
					new object[] { Xchg_Reg_rAX, 2 },
					new object[] { Xchg_Reg_rAX, 3 },
					new object[] { Xchg_Reg_rAX, 4 },
					new object[] { Xchg_Reg_rAX, 5 },
					new object[] { Xchg_Reg_rAX, 6 },
					new object[] { Xchg_Reg_rAX, 7 },

					// 98
					new object[] { Simple2_3a, code[nameof(Code.Cbw)], code[nameof(Code.Cwde)], code[nameof(Code.Cdqe)] },
					new object[] { Simple2_3a, code[nameof(Code.Cwd)], code[nameof(Code.Cdq)], code[nameof(Code.Cqo)] },
					new object[] { Bitness,
						new object[] { Ap, code[nameof(Code.Call_ptr1616)], code[nameof(Code.Call_ptr1632)] },
						invalid,
					},
					new object[] { Simple, code[nameof(Code.Wait)] },
					new object[] { PushSimple2, code[nameof(Code.Pushfw)], code[nameof(Code.Pushfd)], code[nameof(Code.Pushfq)] },
					new object[] { PushSimple2, code[nameof(Code.Popfw)], code[nameof(Code.Popfd)], code[nameof(Code.Popfq)] },
					new object[] { Bitness,
						new object[] { Simple, code[nameof(Code.Sahf)] },
						new object[] { Options3,
							new object[] { Simple, code[nameof(Code.Sahf)] },
							invalid, options[nameof(DecoderOptions.NoLahfSahf64)]
						},
					},
					new object[] { Bitness,
						new object[] { Simple, code[nameof(Code.Lahf)] },
						new object[] { Options3,
							new object[] { Simple, code[nameof(Code.Lahf)] },
							invalid, options[nameof(DecoderOptions.NoLahfSahf64)]
						},
					},

					// A0
					new object[] { Reg_Ob, code[nameof(Code.Mov_AL_moffs8)], al },
					new object[] { Reg_Ov, code[nameof(Code.Mov_AX_moffs16)], code[nameof(Code.Mov_EAX_moffs32)], code[nameof(Code.Mov_RAX_moffs64)] },
					new object[] { Ob_Reg, code[nameof(Code.Mov_moffs8_AL)], al },
					new object[] { Ov_Reg, code[nameof(Code.Mov_moffs16_AX)], code[nameof(Code.Mov_moffs32_EAX)], code[nameof(Code.Mov_moffs64_RAX)] },
					new object[] { Yb_Xb, code[nameof(Code.Movsb_m8_m8)] },
					new object[] { Yv_Xv, code[nameof(Code.Movsw_m16_m16)], code[nameof(Code.Movsd_m32_m32)], code[nameof(Code.Movsq_m64_m64)] },
					new object[] { Xb_Yb, code[nameof(Code.Cmpsb_m8_m8)] },
					new object[] { Xv_Yv, code[nameof(Code.Cmpsw_m16_m16)], code[nameof(Code.Cmpsd_m32_m32)], code[nameof(Code.Cmpsq_m64_m64)] },

					// A8
					new object[] { RegIb, code[nameof(Code.Test_AL_imm8)], al },
					new object[] { Reg_Iz, code[nameof(Code.Test_AX_imm16)], code[nameof(Code.Test_EAX_imm32)], code[nameof(Code.Test_RAX_imm32)] },
					new object[] { Yb_Reg, code[nameof(Code.Stosb_m8_AL)], al },
					new object[] { Yv_Reg, code[nameof(Code.Stosw_m16_AX)], code[nameof(Code.Stosd_m32_EAX)], code[nameof(Code.Stosq_m64_RAX)] },
					new object[] { Reg_Xb, code[nameof(Code.Lodsb_AL_m8)], al },
					new object[] { Reg_Xv, code[nameof(Code.Lodsw_AX_m16)], code[nameof(Code.Lodsd_EAX_m32)], code[nameof(Code.Lodsq_RAX_m64)] },
					new object[] { Reg_Yb, code[nameof(Code.Scasb_AL_m8)], al },
					new object[] { Reg_Yv, code[nameof(Code.Scasw_AX_m16)], code[nameof(Code.Scasd_EAX_m32)], code[nameof(Code.Scasq_RAX_m64)] },

					// B0
					new object[] { RegIb3, 0 },
					new object[] { RegIb3, 1 },
					new object[] { RegIb3, 2 },
					new object[] { RegIb3, 3 },
					new object[] { RegIb3, 4 },
					new object[] { RegIb3, 5 },
					new object[] { RegIb3, 6 },
					new object[] { RegIb3, 7 },

					// B8
					new object[] { RegIz2, 0 },
					new object[] { RegIz2, 1 },
					new object[] { RegIz2, 2 },
					new object[] { RegIz2, 3 },
					new object[] { RegIz2, 4 },
					new object[] { RegIz2, 5 },
					new object[] { RegIz2, 6 },
					new object[] { RegIz2, 7 },

					// C0
					new object[] { Group, "handlers_Grp_C0" },
					new object[] { Group, "handlers_Grp_C1" },
					new object[] { BranchIw, code[nameof(Code.Retnw_imm16)], code[nameof(Code.Retnd_imm16)], code[nameof(Code.Retnq_imm16)] },
					new object[] { BranchSimple, code[nameof(Code.Retnw)], code[nameof(Code.Retnd)], code[nameof(Code.Retnq)] },
					new object[] { VEX3, new object[] { Gv_Mp_2, code[nameof(Code.Les_r16_m1616)], code[nameof(Code.Les_r32_m1632)] } },
					new object[] { VEX2, new object[] { Gv_Mp_2, code[nameof(Code.Lds_r16_m1616)], code[nameof(Code.Lds_r32_m1632)] } },
					new object[] { Group8x64, "handlers_Grp_C6_lo", "handlers_Grp_C6_hi" },
					new object[] { Group8x64, "handlers_Grp_C7_lo", "handlers_Grp_C7_hi" },

					// C8
					new object[] { Iw_Ib, code[nameof(Code.Enterw_imm16_imm8)], code[nameof(Code.Enterd_imm16_imm8)], code[nameof(Code.Enterq_imm16_imm8)] },
					new object[] { Simple3, code[nameof(Code.Leavew)], code[nameof(Code.Leaved)], code[nameof(Code.Leaveq)] },
					new object[] { Simple2Iw, code[nameof(Code.Retfw_imm16)], code[nameof(Code.Retfd_imm16)], code[nameof(Code.Retfq_imm16)] },
					new object[] { Simple2_3a, code[nameof(Code.Retfw)], code[nameof(Code.Retfd)], code[nameof(Code.Retfq)] },
					new object[] { Simple, code[nameof(Code.Int3)] },
					new object[] { Ib, code[nameof(Code.Int_imm8)] },
					new object[] { Bitness,
						new object[] { Simple, code[nameof(Code.Into)] },
						invalid,
					},
					new object[] { Simple2_3a, code[nameof(Code.Iretw)], code[nameof(Code.Iretd)], code[nameof(Code.Iretq)] },

					// D0
					new object[] { Group, "handlers_Grp_D0" },
					new object[] { Group, "handlers_Grp_D1" },
					new object[] { Group, "handlers_Grp_D2" },
					new object[] { Group, "handlers_Grp_D3" },
					new object[] { Bitness,
						new object[] { Ib, code[nameof(Code.Aam_imm8)] },
						invalid,
					},
					new object[] { Bitness,
						new object[] { Ib, code[nameof(Code.Aad_imm8)] },
						invalid,
					},
					new object[] { Bitness,
						new object[] { Simple, code[nameof(Code.Salc)] },
						invalid,
					},
					new object[] { MemBx, code[nameof(Code.Xlat_m8)] },

					// D8
					new object[] { Group8x8, "handlers_FPU_D8_low", "handlers_FPU_D8_high" },
					new object[] { Group8x64, "handlers_FPU_D9_low", "handlers_FPU_D9_high" },
					new object[] { Group8x64, "handlers_FPU_DA_low", "handlers_FPU_DA_high" },
					new object[] { Group8x64, "handlers_FPU_DB_low", "handlers_FPU_DB_high" },
					new object[] { Group8x8, "handlers_FPU_DC_low", "handlers_FPU_DC_high" },
					new object[] { Group8x64, "handlers_FPU_DD_low", "handlers_FPU_DD_high" },
					new object[] { Group8x64, "handlers_FPU_DE_low", "handlers_FPU_DE_high" },
					new object[] { Group8x64, "handlers_FPU_DF_low", "handlers_FPU_DF_high" },

					// E0
					new object[] { Jb2, code[nameof(Code.Loopne_rel8_16_CX)], code[nameof(Code.Loopne_rel8_16_ECX)], code[nameof(Code.Loopne_rel8_16_RCX)], code[nameof(Code.Loopne_rel8_32_CX)], code[nameof(Code.Loopne_rel8_32_ECX)], code[nameof(Code.Loopne_rel8_64_ECX)], code[nameof(Code.Loopne_rel8_64_RCX)] },
					new object[] { Jb2, code[nameof(Code.Loope_rel8_16_CX)], code[nameof(Code.Loope_rel8_16_ECX)], code[nameof(Code.Loope_rel8_16_RCX)], code[nameof(Code.Loope_rel8_32_CX)], code[nameof(Code.Loope_rel8_32_ECX)], code[nameof(Code.Loope_rel8_64_ECX)], code[nameof(Code.Loope_rel8_64_RCX)] },
					new object[] { Jb2, code[nameof(Code.Loop_rel8_16_CX)], code[nameof(Code.Loop_rel8_16_ECX)], code[nameof(Code.Loop_rel8_16_RCX)], code[nameof(Code.Loop_rel8_32_CX)], code[nameof(Code.Loop_rel8_32_ECX)], code[nameof(Code.Loop_rel8_64_ECX)], code[nameof(Code.Loop_rel8_64_RCX)] },
					new object[] { Jb2, code[nameof(Code.Jcxz_rel8_16)], code[nameof(Code.Jecxz_rel8_16)], code[nameof(Code.Jrcxz_rel8_16)], code[nameof(Code.Jcxz_rel8_32)], code[nameof(Code.Jecxz_rel8_32)], code[nameof(Code.Jecxz_rel8_64)], code[nameof(Code.Jrcxz_rel8_64)] },
					new object[] { RegIb, code[nameof(Code.In_AL_imm8)], al },
					new object[] { Reg_Ib2, code[nameof(Code.In_AX_imm8)], code[nameof(Code.In_EAX_imm8)] },
					new object[] { IbReg, code[nameof(Code.Out_imm8_AL)], al },
					new object[] { IbReg2, code[nameof(Code.Out_imm8_AX)], code[nameof(Code.Out_imm8_EAX)] },

					// E8
					new object[] { Jz, code[nameof(Code.Call_rel16)], code[nameof(Code.Call_rel32_32)], code[nameof(Code.Call_rel32_64)] },
					new object[] { Jz, code[nameof(Code.Jmp_rel16)], code[nameof(Code.Jmp_rel32_32)], code[nameof(Code.Jmp_rel32_64)] },
					new object[] { Bitness,
						new object[] { Ap, code[nameof(Code.Jmp_ptr1616)], code[nameof(Code.Jmp_ptr1632)] },
						invalid,
					},
					new object[] { Jb, code[nameof(Code.Jmp_rel8_16)], code[nameof(Code.Jmp_rel8_32)], code[nameof(Code.Jmp_rel8_64)] },
					new object[] { AL_DX, code[nameof(Code.In_AL_DX)] },
					new object[] { eAX_DX, code[nameof(Code.In_AX_DX)], code[nameof(Code.In_EAX_DX)] },
					new object[] { DX_AL, code[nameof(Code.Out_DX_AL)] },
					new object[] { DX_eAX, code[nameof(Code.Out_DX_AX)], code[nameof(Code.Out_DX_EAX)] },

					// F0
					new object[] { PrefixF0 },
					new object[] { Simple, code[nameof(Code.Int1)] },
					new object[] { PrefixF2 },
					new object[] { PrefixF3 },
					new object[] { Simple, code[nameof(Code.Hlt)] },
					new object[] { Simple, code[nameof(Code.Cmc)] },
					new object[] { Group, "handlers_Grp_F6" },
					new object[] { Group, "handlers_Grp_F7" },

					// F8
					new object[] { Simple, code[nameof(Code.Clc)] },
					new object[] { Simple, code[nameof(Code.Stc)] },
					new object[] { Simple, code[nameof(Code.Cli)] },
					new object[] { Simple, code[nameof(Code.Sti)] },
					new object[] { Simple, code[nameof(Code.Cld)] },
					new object[] { Simple, code[nameof(Code.Std)] },
					new object[] { Group, "handlers_Grp_FE" },
					new object[] { Group, "handlers_Grp_FF" },
				}),
			};
			return handlers;
		}
	}
}
